对于输出,我想要一个列表,每个索引包含一个数字和一个字母,它们来自两个不同的文件,如B2。相反,当我运行我的程序时,我得到输出列出不同行上的每个文件值。其中一个输入文件是一个简单的数字列表,另一个是字母列表。根据我的代码,我希望得到一些帮助。提前谢谢!
def combine():
mylist = []
galaxy = open("galaxies.rtf","r")
print("Reading from galaxies.txt...")
for line in galaxy:
gline = galaxy.read()
cycle = open("cycles.rtf","r")
print("Reading from cycle.txt...")
for line in cycle:
cline = cycle.read()
print("Combining values...")
string = gline + cline
mylist.append(string)
galaxy.close()
cycle.close()
return mylist
combine()
# the main function calls combine() to read the data from files
# then displays a formatted table with the combined values
def main():
#Print a header at start of main() function
print("Report of BOOYA Radio Galaxy Observations\n")
# Call the combine() function, returned list saved as radioData
radioData = combine()
# Loop through the radioData list printing 5 columns of values
for j in range(0,len(radioData),5):
for k in range(0,5):
print(radioData[j+k],end="\t")
print()
main()
答案 0 :(得分:0)
你有几个问题。例如,这个
for line in galaxy:
gline = galaxy.read()
从galaxy
读取一行并将其放入line
,然后将文件的其余部分读取到最后并将其放入gline
。在第二轮中,文件没有更多内容,因此for for exits。
你可以用不同的方式完成工作。文件迭代包括\n
的行。 zip
接受多个迭代器并将它们组合成元组。您可以使用它来迭代两个文件中的行,去除行结尾并将它们添加到一起。
>>> with open('galaxies.rtf') as f1, open('cycles.rtf') as f2:
... mylist = list((l1.strip() + l2.strip() for l1, l2 in zip(f1, f2)))
...
>>> mylist
['A1', 'B2', 'C3', 'D4', 'E5', 'F6']
这可能仍然是一个问题,因为rtf
不是简单的文字文件。