代码之家  ›  专栏  ›  技术社区  ›  Fred Johnson

我的for循环只读取txt文件的第一行

  •  2
  • Fred Johnson  · 技术社区  · 11 月前

    我正试图取一个文件,将每一行翻译成“伪”猪拉丁语(只需移动第一个字母并添加ay)。

    我已经创建了一个有效的循环,但它只适用于文件的第一行。它不会返回以完成对文件的浏览。

    因此,循环正在努力将每个单词翻译成猪拉丁语,我只是无法将其返回到原始列表来翻译每一行。

    txt文件示例:

    Use the Force Luke
    Have a nice day
    Don't call me Shirley
    

    我的代码只提供给我:

    English: use the force luke
    Pig Latin: seuay hetay orcefay ukelay
    

    它不会移动到txt文件的第二行。

    with open('phrases.txt', 'r') as text:
        file_contents = text.readline().rstrip()
    
        fullRun = []
        for i in file_contents.split():
            latin = i[0]
            pig = i[1:]
            fullRun.append(pig+latin+'AY')
            x = ' '
            s = x.join(fullRun)
        print(f'English: {file_contents}')
        print(f'Pig Latin: {s}')
    
    1 回复  |  直到 11 月前
        1
  •  0
  •   Luke L    11 月前

    您需要遍历该文件以获取所有行。文件的 .readline() 方法仅读入 行(你应该通过看名字来判断 readline 不是复数)。 .readlines() 返回所有行,但不能使用 .rstrip() 因为 .readlines() 返回一个 list 而不是 str 。以下代码是最好和最多的 Python 做你想做的事的方式:

    with open('phrases.txt', 'r') as text:
        for a_line in text:
            line = a_line.rstrip()
            fullRun = []
            for i in line.split():
                latin = i[0]
                pig = i[1:]
                fullRun.append(pig+latin+'AY')
                x = ' '
                s = x.join(fullRun)
            print(f'English: {file_contents}')
            print(f'Pig Latin: {s}')
    

    这是因为内置文件对象实现了 __iter__ 方法,该方法允许 for -循环以提取其内容。