组合文件时输出奇怪

时间:2017-04-02 22:12:40

标签: python file

对于输出,我想要一个列表,每个索引包含一个数字和一个字母,它们来自两个不同的文件,如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()

1 个答案:

答案 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不是简单的文字文件。