Python 无法从文件中读取每个字符

Python 无法从文件中读取每个字符,python,file-handling,Python,File Handling,这是欧拉计划第18题。 我使用此方法读取文件“18.txt” 这是我的密码- f=open("18.txt","r") grid1=[] grid=[grid1] no=0 while f.read(1): print(f.read(1)) 但它不会打印文件中的每个数字,并跳过其他数字 文本内容- 七十五 95 64 17 47 82 18 35 87 10 20 04 82 47 65 19 01 23 75 03 34 88 02 77 73 07 63 67 99 65 04 28

这是欧拉计划第18题。 我使用此方法读取文件“18.txt” 这是我的密码-

f=open("18.txt","r")
grid1=[]
grid=[grid1]
no=0
while f.read(1):
   print(f.read(1))
但它不会打印文件中的每个数字,并跳过其他数字

  • 文本内容-

    七十五 95 64 17 47 82 18 35 87 10 20 04 82 47 65 19 01 23 75 03 34 88 02 77 73 07 63 67 99 65 04 28 06 16 70 92 41 41 26 56 83 40 80 70 33 41 48 72 33 47 32 37 16 94 29 53 71 44 65 25 43 91 52 97 51 14 70 11 33 28 77 73 17 78 39 68 17 57 91 71 52 38 17 14 91 43 58 50 27 29 48 63 66 04 68 89 53 67 30 73 16 69 87 40 31 04 62 98 27 23 09 70 98 73 93 38 53 60 04 23


  • 每次迭代调用
    f.read(1)
    两次,一次在
    中,一次在f.read(1)
    中,另一次在
    中调用打印(f.read(1))
    。您只打印第二个字符,因此只能看到读取的数据的一半

    如果要查看打印的每个字符,请在每次迭代中调用
    f.read(1)
    just一次。将结果存储在变量中,并对变量进行测试,然后打印变量:

    char = f.read(1)
    while char:
        print(char)
        char = f.read(1)
    
    如果使用
    而为True:
    并在
    f.read(1)
    不返回数据时中断,则可以避免在循环之前分配到
    char

    while True:
        char = f.read(1)
        if not char:
            break
        print(char)
    
    或者,您可以使用:

    如果要从文件中读取数字,请不要使用
    f.read(1)
    。只需在文件上循环并在空白处拆分每一行:

    with open("18.txt") as f:
        for line in f:
            print(line.split())
    
    您可能也希望将文本转换为整数,并建立
    网格
    列表:

    grid = []
    with open("18.txt") as f:
        for line in f:
            values = [int(v) for v in line.split()]
            grid.append(values)
    

    在这里,你读(1)一些东西,但是“扔掉”结果,然后在
    while
    中读(1)下一项,然后打印该值。你的问题是什么?如何避免while语句中的f.read(1)扔掉结果。你能给我一个从文件中读取单个字符的方法吗?同样,它跳过数字,直到最后一位才读取。这是我得到的结果-594178371010020425727030306692430404040404070707030404070707070704040404040703484343432995152090101010137777975827676040401090409040974747474040904010101979442@ShikharDwivedi:与我发布的代码不同。您似乎仍在使用旧版本。您正在读取单个字符的文件吗?它正在从索引1的网格中追加值。网格[0]是空的。@ShikharDwivedi:那么文件的第一行是空的。请跳过空行(
    ,如果不是line.strip():继续)
    )或修复您的文件。@MartjinPieters我目前正在使用python 3.7.0(v3.7.0:1bf9cc5093,2018年6月27日,04:06:47)。是的,实际上我想向grid1添加数字,当f.read(1)获得空间时,它将追加到grid1中,当f.read(1)获得“\n”时,grid1将追加到网格中。
    grid = []
    with open("18.txt") as f:
        for line in f:
            values = [int(v) for v in line.split()]
            grid.append(values)