我有2个带有数据的文本文件,我想要一个循环,它同时通过每个文本文件的第一行,然后是第二个,然后是第三个。所以我用了一个内心的'这两个循环但它不循环,就像我想要它而是循环第一个文本文件的第一行,第二个文本文件中的所有行,然后第一个文件的第二行,第二个文件的所有行。
我已经尝试了一切,但没有工作。如果我使用下面的break语句它开始使用第一个文本文件的所有行与第二个文本文件的相同的第一行,但如果我删除该break语句然后它将选择相同第一个文本文件的第一行,但第二个文本文件的所有行。
这是我的代码:
fi =open("C:\\Users\\file1.txt","r")
file1 = fi.read().splitlines()
fi2 = open("C:\\Users\\file2.txt","r")
file2 = fi2.read().splitlines()
for file1_data in file1:
for file2_data in file2:
try:
print(file1_data)
print(file2_data)
except:
print("exit")
break
答案 0 :(得分:3)
你可以这样做:
for file1_data, file2_data in zip(file1,file2):
try:
print(file1_data)
print(file2_data)
except:
print("exit")
break
您可以找到有关zip here的更多信息。
如果文件长度不同,请使用itertools.zip_longest。所以,你会这样做:
from itertools import zip_longest
for file1_data, file2_data in zip_longest(file1,file2):
try:
print(file1_data)
print(file2_data)
except:
print("exit")
break
答案 1 :(得分:0)
我只使用1 for
循环和一个行计数器。
如果文件相当小,您可以使用readlines()
读取数据,因此您不必split()
,然后获取两个文件的最小行数,然后逐个读取它们
这样的事情:
def read_data(filename):
openfile = open(filename, 'r')
data = openfile.readlines()
openfile.close()
return data
def get_min_lines(list1, list2):
"""
returns the minimum number of lines
comparing the two lists
"""
return min([len(list1), len(list2)])
def main():
#
# read the data of both files
file_1_data = read_data(r'c:\somedir\somefile1.txt')
file_2_data = read_data(r'c:\somedir\somefile2.txt')
#
# get the max number of lines you need to iterate to
# this will be the smaller of the two files
# just in case the files are not equal size
max_lines = get_min_lines(file_1_data, file_2_data)
#
# use one for loop to go over all lines
# added in the .strip('\n') to get rid of extra linefeeds
# which are still present in the data from the original readlines()
for line_counter in range(0, max_lines):
print(file_1_data[line_counter].strip('\n'))
print(file_2_data[line_counter].strip('\n'))
if __name__ == '__main__':
main()