无法正确读取文件中的行

Unable to properly read the lines from a file

我有文件,是我用 python script 写的。该文件很大,包含超过 1000 行,每一行都非常大,就像 :(shortened)

1 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0
  1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0
  1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0
2 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0
  1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0
  1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0
3 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0
  1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0
...

你看,在显示器上显示时,每行可以占3行的space。
当我尝试时:

fp = open('data.txt','r')
c = 0
for line in fp:
    c += 1
print("No. of line = ",c)

我得到了正确的值,当我使用 read() 函数时,我得到了一个不同的值,如:

fp = open('data.txt','r')
c = 0
data = fp.read()
for line in data:
    c += 1
print("No. of line = ",c)

谁能解释一下,使用 read() 函数和不使用它有什么区别?

提前致谢...

使用

data = fp.read()
for line in data:
    c += 1 

您在一个字符串中读取所有内容,并且 for-loop 将此字符串视为字符列表 - 因此您计算字符数。

您必须使用 readlines() 获取行列表并计算此列表中的行数

data = fp.readlines()
for line in data:
    c += 1 

顺便说一句:计算字符的结果相同

data = fp.read()
c = len(data) 

并计算行数

data = fp.readlines()
c = len(data)

顺便说一句:您还可以使用 print() 查看变量

中的内容
data = fp.read()
print(data[0])
print(data[:3])
print(data)

data = fp.readlines()
print(data[0])
print(data[:3])
print(data)

如果你想在一个脚本中测试,那么你必须再次关闭并打开失败,或者使用 fp.seek(0) 移动到文件开头,然后再阅读。


要使用线条,您应该使用

fp = open('data.txt','r')

for line in fp:
    # ...code ...

fp.close()

fp = open('data.txt','r')
all_lines = fp.readlines()

for line in all_lines:
    # ...code ...

fp.close()

with ... as ...

with open('data.txt','r') as fp:
    for line in fp:
        # ...code ...

with open('data.txt','r') as fp:
    all_lines = fp.readlines()
    for line in all_lines:
        # ...code ...