以下代码逐行读取文件。当从输入文件读入行时,将每行输出到文本文件(output.txt)的最有效方法是什么?
fileHandle = open('file', 'r')
for line in fileHandle:
fields = line.split('|')
print(fields[0]) # prints the first fields value
print(fields[1]) # prints the second fields value
fileHandle.close()
中找到
答案 0 :(得分:1)
一种有效的方法是使用生成器和上下文管理器来处理文件。上下文管理器负责关闭文件。生成器将一次生成一行,而不是首先生成临时列表。
with open('read_file', 'r') as reader:
with open('output_file', 'w') as writer:
gen = (line.split('|') for line in reader)
for row in gen:
writer.write(row)
答案 1 :(得分:1)
这是pandas版本,我们可以用一种非常易读的方式做到这一点:
import pandas as pd
df = pd.read_csv('infile.csv', sep="|")
df.iloc[:,:2].to_csv('outfile.csv', sep="|", index=False)
这里的关键是:
df.iloc[:,:2] # selects the first two columns
创建类文件对象的示例:
import io
s = u"""A|B|C
1|2|3
4|5|6"""
file = io.StringIO(s)
import pandas as pd
df = pd.read_csv(file, sep="|")
output = df.iloc[:,:2].to_csv(sep="|", index=False)
print(output)
返回:
A|B
1|2
4|5
答案 2 :(得分:0)
我是这样做的,我在'read'上打开一个输入文件,在'write'上打开一个输出文件。我从Python教科书中得到了这个答案。它说python可以处理一次打开的多个文件。只需确保添加对print语句“file = outfile”的引用。然后当然关闭这两个文件。
infile = open(infileName,'r')
outfile = open(outfileName,'w')
for line in infile:
fields = line.split('|')
print(fields[0], file=outfile)
print(fields[1], file=outfile)
infile.close()
outfile.close()