打开并读取python中的所有文件 - python beginner

时间:2017-11-09 14:13:05

标签: python

我想读取文件夹/目录中每个文件的内容,然后在最后打印它们(我最终想从各个文件中挑选出一些碎片并将它们放在一个单独的文档中) 到目前为止,我有这个代码

import os
path = 'results/'
fileList = os.listdir(path)
for i in fileList:
    file = open(os.path.join('results/'+ i), 'r')
allLines = file.readlines()
print(allLines)

最后我没有得到任何错误,但它只打印我的文件夹中的一个字符串中的最后一个文件的内容,我想确保它读取每个文件,以便我可以从每个文件访问我想要的数据文件。我在网上看了,我找不到我错的地方。有没有办法确保循环迭代我的所有文件并阅读所有文件?

当我使用

时,我也得到相同的结果
 file = open(os.path.join('results/',i), 'r')

在第5行

请帮助我迷失方向 谢谢!

4 个答案:

答案 0 :(得分:1)

你忘记了这一行的缩进allLines = file.readlines() 也许你可以试试:

import os

allLines = []
path = 'results/'
fileList = os.listdir(path)
for file in fileList:
   file = open(os.path.join('results/'+ i), 'r')
   allLines.append(file.read())
print(allLines)

答案 1 :(得分:0)

  • 分离您想要做的事情的不同功能。
  • 尽可能使用发电机。特别是如果有很多文件或大文件

进口

from pathlib import Path
import sys

确定要处理的文件:

source_dir = Path('results/')

files = source_dir.iterdir()

[变体]过滤文件

如果您只需要扩展名为.ext

的文件
files = source_dir.glob('*.ext')

处理文件

def process_files(files):
    for file in files:
        with file.open('r') as file_handle :
            for line in file_handle:
                # do your thing
                yield line

保存要保留的行

def save_lines(lines, output_file=sys.std_out):
    for line in lines:
        output_file.write(line)

答案 2 :(得分:0)

这也会创建一个包含您要打印的所有文件的文件。

rootdir= your folder, like 'C:\\Users\\you\\folder\\'
import os
f = open('final_file.txt', 'a')
for root, dirs, files in os.walk(rootdir):  
    for filename in files:
        data = open(full_name).read()
            f.write(data + "\n")                 
f.close()

这是一个类似的案例,有更多功能:Copying selected lines from files in different directories to another file

答案 3 :(得分:0)

您忘记缩进此行allLines.append(file.read())。 因为它位于循环之外,所以只有file循环完成后才会将for变量附加到列表。所以它只附加循环后剩余的file变量的最后一个值。此外,您不应以这种方式使用readlines()。只需使用read()代替

import os

allLines = []
path = 'results/'
fileList = os.listdir(path)
for file in fileList:
   file = open(os.path.join('results/'+ i), 'r')
   allLines.append(file.read())
print(allLines)