Я читаю строки из текстового файла, чтобы получить список путей, пример файла 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'

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

0
ValientProcess 2 Июл 2019 в 14:57

4 ответа

Лучший ответ

Это должно помочь. Вы можете проверить, является ли строка пустой, используя 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()]
3
Rakesh 2 Июл 2019 в 12:12

Примените метод .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')
2
Durgesh Kumar 2 Июл 2019 в 12:29

Два решения:

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

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
Dali 2 Июл 2019 в 12:27

Попробуй это,

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']
1
shaik moeed 2 Июл 2019 в 12:12