Python使用子目录搜索目录中的文本文件

时间:2018-01-04 20:31:45

标签: python

我正在尝试为自己创建一个小项目而且我被困住了。 我有一个包含子文件夹的文件夹,每个子文件夹都包含一个名为 QWR.txt 的文本文件。所以我想读取所有文件并将文件中的文本存储在一个文件中。

这是我的代码:

import glob
for filename in glob.iglob('files/**/QWR.txt', recursive=True):
   with open(filename, 'r') as file:
      s = file.read()
   with open('output.txt', "wb") as file:
      file.write(s)

一开始它可以工作但是在20多个文件之后它会卡住并给我一个错误:

return codecs.charmap_decode(input,self.errors,decoding_table)[0]

UnicodeDecodeError: 'charmap' codec can't decode byte 0x8a in position 1396: character maps to <undefined>

1 个答案:

答案 0 :(得分:0)

你的缩进是错误的。嗯,有两个问题:

  • 你应该使用二进制模式阅读&amp;写入您的文件。你将避免所有python 2/3 compat。问题,CR添加/删除和编码错误
  • 在循环之前打开输出,或者只将最后一个文件写入其中(或使用追加模式)
像这样:

import glob
with open('output.txt', "wb") as file:
   for filename in glob.iglob('files/**/QWR.txt', recursive=True):
      with open(filename, 'rb') as fr:
         fw.write(fr.read())

如果输入文件很大并且你无法通过全局读取来获得内存,那么fw.write(fr.read())的一个很好的替代方案是:

shutil.copyfileobj(fr,fw)