Удаление добавленных частей "\ n" из списка, созданного из текстового файла - PullRequest
0 голосов
/ 02 июля 2019

Я читаю строки из текстового файла, чтобы получить список путей, пример txt файла:

/data0/home/rslat/GFDL/archive/edg/fms/river_routes_gt74Sto61S=river_destination_field ,
/data0/home/rslat/GFDL/archive/fms/mom4/mom4p1/mom4p1a/mom4_ecosystem/preprocessing/rho0_profile.nc ,
/data0/home/rslat/GFDL/archive/fms/mom4/mom4p0/mom4p0c/mom4_test8/preprocessing/fe_dep_ginoux_gregg_om3_bc.nc=Soluble_Fe_Flux_PI.nc ,
/data0/home/rslat/GFDL/archive/jwd/regression_data/esm2.1/input/cover_type_1860_g_ens=cover_type_field ,

Чтобы прочитать это, я использую:

x = open('/File_list.txt', 'r')
y = [line.split(',') for line in x.readlines()]

Но у каждого элемента теперь есть \n в конце, например, для y[2]:

['/data0/home/rslat/GFDL/archive/fms/mom4/mom4p0/mom4p0c/mom4_test8/preprocessing/fe_dep_ginoux_gregg_om3_bc.nc=Soluble_Fe_Flux_PI.nc ',
 '\n']

Как мне удалить эти ненужные \n? Пробовал:

good = [line.rstrip('\n') for line in y]

Но получил ошибку:

---------------------------------------------------------------------------
AttributeError                            Traceback (most recent call last)
<ipython-input-33-d3ed0e6bdc26> in <module>
----> 1 good = [line.rstrip('\n') for line in y]

<ipython-input-33-d3ed0e6bdc26> in <listcomp>(.0)
----> 1 good = [line.rstrip('\n') for line in y]

AttributeError: 'list' object has no attribute 'rstrip'

Кажется, это простая проблема, но я пока не могу ее решить.

Ответы [ 4 ]

3 голосов
/ 02 июля 2019

Это должно помочь.Вы можете проверить, является ли строка пустой, используя if line.strip()

Пример:

with open('/File_list.txt') as infile:
    #good = [line.strip().split(",") for line in infile if line.strip()]
    good = [line.strip(" ,\n") for line in infile if line.strip()]
2 голосов
/ 02 июля 2019

Примените метод .strip перед разделением, он удалит любой непечатаемый символ в конце строки, например \ r, \ n, \ t и т. Д.

x = open('/File_list.txt', 'r')
y = [line.strip().split(',') for line in x.readlines()]

Если числострок в файле маленького размера (скажем, меньше 1000 или 10000), вы также можете использовать метод .read вместо .readlines, как показано ниже:

x = open('/File_list.txt', 'r')
y = x.read().strip().split('\n')
1 голос
/ 02 июля 2019

Два решения:

Чтение всего файла:

x = open('/File_list.txt', 'r')
fileData = x.read()
y = fileData.split(',')
// can use y.pop() to remove the last empty element if existing

Чтение по строкам:

x = open('/File_list.txt', 'r')
y = [line[:-1] for line in x.readlines()]
// just remove the last ',' on the line, don't need to split
1 голос
/ 02 июля 2019

Попробуйте,

with open("/File_list.txt", "r") as f:
    data = [line.replace("\n","").strip(",").strip() for line in f.readlines()]

Вывод:

['/data0/home/rslat/GFDL/archive/edg/fms/river_routes_gt74Sto61S=river_destination_field',
 '/data0/home/rslat/GFDL/archive/fms/mom4/mom4p1/mom4p1a/mom4_ecosystem/preprocessing/rho0_profile.nc',
 '/data0/home/rslat/GFDL/archive/fms/mom4/mom4p0/mom4p0c/mom4_test8/preprocessing/fe_dep_ginoux_gregg_om3_bc.nc=Soluble_Fe_Flux_PI.nc',
 '/data0/home/rslat/GFDL/archive/jwd/regression_data/esm2.1/input/cover_type_1860_g_ens=cover_type_field']
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...