Чтение с первой строки многострочной строки - PullRequest
0 голосов
/ 16 июня 2020

У меня есть каталог с файлами как:

ab_list
bd_list
cd_list
mno_list
hk_list 
pd_list

У меня есть другой файл с именем testfile вне этого каталога:

abc
que nw

ab_list   ON   8
gs_list   ON   9
hk_list   OFF  9
bd_list   ON   7
cd_list   OFF  6
fr_list   ON   5
mno_list  ON   4
pq_list   OFF   6
jk_list   ON   7
pd_list   OFF  8

Я хочу сравнить 2 и все файлы с именем файла и ON рядом с ним (если совпадают), их содержимое должно быть объединено в новый файл с именем merge_file. Другие файлы, которые соответствуют testfile, но имеют OFF, их имена должны быть напечатаны в new_file. содержимое ab_list bd_list и mno_list должно быть объединено в top_file

вот код, который я пробовал до сих пор:

from glob import glob

test_file_directory = "C:\\Users\\User\\Desktop\\Folder\\"

files1 = glob("*.txt")
with open(test_file_directory+"testfile.txt","r") as f:
    files2 = [' '.join([l.split()[0],l.split()[1]]) for l in f.readlines()[3:]]

for f1 in files1:
    for f2 in files2:
        if f1[:-4]+'   ON' == f2:
            #print('match')
            with open('merge_file.txt','a') as a:
                with open(f1,'r') as r:
                    a.write(r.readlines()[1:]+'\n')
        elif f1[:-4]+'   OFF' == f2:
            #print('match')
            with open('match_file.txt','a') as a:
                with open(f1,'r') as r:
                    a.write(f"{f2} {len(r.readlines())}\n")
elif f1[:-4]+'   ON' == f2:
            #print('match')
            with open('match_file.txt','a') as a:
                with open(f1,'r') as r:
                    a.write(f"{f2} {len(r.readlines())}\n")

Я хочу, чтобы содержимое файла, записываемого в merge_file, начиналось с чтения вторая строка файла вместо первой, а match_file также имеет имена файлов с включенным рядом с ним (он выключен с первого elif) a.write(r.readlines()[1:]+'\n' в этой строке выдается ошибка, указывающая, что это строка, а не список.

1 Ответ

2 голосов
/ 16 июня 2020

a.write (r.readlines () [1:] + '\ n')

Он выполняет добавление с помощью r.readlines () [1:] и ' \ n '.

r.readlines () [1:] - это список с каждой строкой в ​​файле.

Итак, вы получили ошибку

TypeError: can только список конкатенации (не "str") в список

Что вам нужно сделать, так это объединить всю строку в списке с помощью '\ n', используя соединение, например

a.write('\n'.join(r.readlines()[1:])+'\n')

В любом случае, чтобы скопировать содержимое файла, вы должны использовать f.read (), а не f.readlines ()

a.write(r.read()+'\n')

Чтобы получить первую строку поездки, вы можете использовать str.partition ('\ n') , он разделяет исходную строку на три раздела как [first_string, '\ n', next_string], например

a.write(r.read().partition('\n')[2]+'\n')
...