gpt4 book ai didi

python - 基于另一个文件内容的文件输出

转载 作者:太空宇宙 更新时间:2023-11-03 19:05:52 26 4
gpt4 key购买 nike

我有一个与 Python 中的文件输入和输出有关的问题(这是这个问题的延续: how to extract specific lines from a data file ,现已解决)。

因此,我有一个大文件 danish.train 和 11 个小文件(称为 danish.test.part-01 等),每个文件都包含从 danish.train 文件中选择不同的数据。现在,对于这十一个文件中的每一个,我想创建一个补充文件。这意味着对于每个小文件,我想创建一个包含 danish.train 内容减去小文件中已有部分的文件。

到目前为止我想到的是:

trainFile = open("danish.train")

for file_number in range(1,12):
input = open('danish.test.part-%02d' % file_number, 'r')

for line in trainFile:
if line not in input:
with open('danish.train.part-%02d' % file_number, 'a+') as myfile:
myfile.write(line)

问题是这段代码只给出 file_number 1 的输出,尽管我有一个从 1-11 的循环。如果我更改范围,例如更改为 in range(2,3),我会得到一个输出 danish.train.part-02,但此输出包含以下副本整个 danish.train ,而不遗漏文件 danish.test.part-02 的内容,如我所愿。

我怀疑这些问题可能与我没有完全理解 with...as 运算符有关,但我不确定。任何帮助将不胜感激。

最佳答案

当您打开一个文件时,它会返回一个遍历文件行的迭代器。这很好,因为它可以让您一次一行地浏览文件,而无需将整个文件立即保存到内存中。在您的情况下,它会导致一个问题,因为您需要多次迭代该文件。

相反,您可以将完整的训练文件读入内存,并多次浏览它:

with open("danish.train", 'r') as f:
train_lines = f.readlines()

for file_number in range(1, 12):
with open("danish.test.part-%02d" % file_number, 'r') as f:
test_lines = set(f)
with open("danish.train.part-%02d" % file_number, 'w') as g:
g.writelines(line for line in train_lines if line not in test_lines)

我也稍微简化了逻辑。如果您不关心行的顺序,您还可以考虑将训练行读入集合中,然后仅使用集合操作而不是我在最后一行中使用的生成器表达式。

关于python - 基于另一个文件内容的文件输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14727707/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com