【问题标题】:Why would a merged file be one less line than its input files?为什么合并的文件会比其输入文件少一行?
【发布时间】:2021-07-30 22:32:17
【问题描述】:

我正在做一些多线程网络抓取并将每个线程 100 行写入 100 个文件。我检查以确保每个文件都有 100 行然后我合并。然后我检查以确保合并的文件有 10000 行。只是这一次,合并的文件似乎短了一行。所有其他运行都有 10000 行。知道为什么合并的文件会少一行吗?这是我用来合并的代码。我检查过所有输入文件都有 100 行。他们都这样做。所以我不确定为什么合并的文件少了一行。

with open(rf"data\run12.txt", "w", encoding="utf-8") as outfile:
    for fname in filenames:
        with open(fname, "r", encoding = "utf-8") as infile:
            for line in infile: 
                outfile.write(line)

【问题讨论】:

  • 其中一个文件的最后一行末尾没有换行符。所以它的最后一行正在与下一个文件的第一行合并。
  • 不同线程是否写入同一个文件?
  • 为什么要逐行读取文件?您可以通过outfile.write(infile.read()) 一次性完成所有操作。但这并不能解决上述问题。
  • 您能否通过其他可靠的方法(可能使用cat *.txt > mergedfile)合并文件,然后将该文件与您的程序生成的合并文件进行比较?看到不同的线可能会很有用。
  • 您计算行数的方式是否可能与您读行的方式不同?例如,也许您的行计数器比您的行阅读器多发现一个行尾字符,可能对 readlines() 感兴趣并检查行数,然后更仔细地查看行列表中

标签: python file merging-data


【解决方案1】:

当文件的最后一行不是新行时会发生这种情况。我的一个输入文件最后没有写换行符,所以我在每个输入文件中有 100 行,但输出中只有 9999 行,因为一个输入文件末尾缺少换行符导致它的最后一个行与相邻输入文件的第一行合并。

【讨论】:

    猜你喜欢
    • 2019-09-23
    • 2020-10-01
    • 1970-01-01
    • 2011-11-26
    • 2018-06-15
    • 1970-01-01
    • 1970-01-01
    • 2015-05-05
    • 1970-01-01
    相关资源
    最近更新 更多