将多个文件连接到单个文件对象中,而无需创建新文件

blu*_*e13 17 python file

这个问题与Python连接文本文件有关

我有一个清单file_names,比如['file1.txt', 'file2.txt', ...].

我想将所有文件打开成一个文件对象,我可以逐行阅读,但我不想在这个过程中创建一个新文件.那可能吗?

with open(file_names, 'r') as file_obj:
   line = file_obj.readline()
   while line:
       ...
Run Code Online (Sandbox Code Playgroud)

Ano*_*nta 22

使用来自fileinput模块的输入.它从多个文件中读取,但看起来字符串来自单个文件.(懒惰线迭代).

import fileinput

files= ['F:/files/a.txt','F:/files/c.txt','F:/files/c.txt']

allfiles = fileinput.input(files)

for line in allfiles: # this will iterate over lines in all the files
    print(line)

# or read lines like this: allfiles.readline()
Run Code Online (Sandbox Code Playgroud)

如果您需要在一个地方使用所有文本 StringIO

import io

files= ['F:/files/a.txt','F:/files/c.txt','F:/files/c.txt']


lines = io.StringIO()   #file like object to store all lines

for file_dir in files:
    with open(file_dir, 'r') as file:
        lines.write(file.read())
        lines.write('\n')

lines.seek(0)        # now you can treat this like a file like object
print(lines.read())
Run Code Online (Sandbox Code Playgroud)


Loh*_*HAR 5

沿着这条线尝试一些东西:

def read_files(*filenames):
    for filename in filenames:
        with open(filename,'r') as file_obj:
            for line in file_obj:
                yield line
Run Code Online (Sandbox Code Playgroud)

你可以用

for line in read_files("f1.txt", "f2.txt", "f3.txt"):
    #... do whatever with the line
Run Code Online (Sandbox Code Playgroud)

或者

filenames = ["f1.txt", "f2.txt", "f3.txt"]
for line in read_files(*filenames):
    #... do whatever with the line
Run Code Online (Sandbox Code Playgroud)