我想创建一个简单的代码来组合两个文本文件,例如file1.txt包含:
car
house
和file2.txt包含:
voiture
maison
我希望将两个文件的行组合在一起,然后用':'将它们分开来看起来像这样:
car:voiture
house:maison
我尝试这样做,我确定我错了,无论如何我会发布我的代码:):
with open("user.txt") as u:
with open("site.txt") as s:
for line in s.read().split('\n'):
s1=line
for line in u.read().split('\n'):
s2=line
with open('result.txt', 'a') as file:
file.write(s1+':'+s2)
非常感谢任何帮助人员:)
答案 0 :(得分:5)
这是itertools.izip
的用例:
from itertools import izip
with open('file1.txt') as f1, open('file2.txt') as f2, open('new.txt', 'w') as fout:
for fst, snd in izip(f1, f2):
fout.write('{0}:{1}\n'.format(fst.rstrip(), snd.rstrip()))
这将第一个文件中的第一行与第二个文件中的第一行(然后是第一个文件中的第二行和第二个文件中的第二行等)组合在一起,从行中删除换行符,添加中间的:
并添加\n
,因此它实际上是一条线。这样可以节省将两个文件完全加载到内存中,并在每个文件上迭代执行。但请注意,如果文件长度不相等,则结果将停在最短文件中的行数。
答案 1 :(得分:2)
您的代码将无法正常工作,因为您尝试读取第一个文件中的每一行的第二个文件,还有一些其他错误(例如不写新行等)。尝试改为
with open("user.txt") as u, \
open("site.txt") as s, \
open("result.txt", "a") as file: # Only open every file once for all output
for s1 in u: # You don't nead to use .read().split('\n')
s2 = s.readline() # Read ONE line INCLUDING the newline char
file.write(s1 + ":" + s2) # Write output with the newline from `s2`
或者,您可以阅读所有行并使用zip
:
with open("user.txt") as u, \
open("site.txt") as s, \
open("result.txt", "a") as file:
user_lines = u.readlines()
size_lines = s.readlines()
for s1, s2 in zip(user_lines, size_lines):
file.write(s1 + ":" + s2 + "\n") # Write output with newline char
答案 2 :(得分:1)
你很亲密,但是有问题。您需要将它们一起迭代,而不是一个接一个地迭代或一个接一个地迭代。幸运的是,使用zip
:
with open('user.txt', 'r') as user_file, \
open('site.txt', 'r') as site_file, \
open('result.txt', 'a') as result_file:
user_lines = user_file.read().split('\n')
site_lines = site_file.read().split('\n')
for user_line, site_line in zip(user_lines, site_lines):
result_file.write(user_line + ':' + site_line + '\n')
答案 3 :(得分:1)
如果你这样做,你将在文件到达第二行之前阅读所有文件。
您希望使用 file.readline()一次一行地迭代每个文件,直到您完成一个或两个文件(并且可能有一些事情要处理最后一条不均匀的行,如果文件大小不相同。)
答案 4 :(得分:1)
我的解决方案:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
with open('result.txt', 'a') as r:
with open("user.txt") as u:
with open("site.txt") as s:
for line in u:
r.write(
"{0}: {1}".format(
line[:-1] if line.endswith('\n') else line,
s.readline()
)
)
希望这有帮助!