我有一个目录,其中包含以下文件:
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 的新文件中。其他与测试文件匹配但具有 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旁边还有带有 ON 的文件名(它从第一个 OF 开始有 OFF(a.write(r.readlines()[1:]+'n'
此行给出一个错误,指出它是一个字符串而不是列表。
a.write(r.readlines(([1:]+''(
它使用 r.readlines(([1:] 和 '' 执行加法。
r.readlines(([1:] 是一个包含文件中每一行的列表。
所以你得到了错误
类型错误:只能将列表(不是"str"(连接到列表
您应该做的是使用连接将列表中的所有行与""连接,例如
a.write('n'.join(r.readlines()[1:])+'n')
无论如何,要复制文件的内容,你应该使用 f.read((,而不是 f.readlines((
a.write(r.read()+'n')
要获得第一行,您可以使用str.partition(''(,它将源字符串分为三个分区,如[first_string,'',next_string],如
a.write(r.read().partition('n')[2]+'n')