Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/327.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 为什么不是';我的程序不能读取文件的下一行吗?_Python - Fatal编程技术网

Python 为什么不是';我的程序不能读取文件的下一行吗?

Python 为什么不是';我的程序不能读取文件的下一行吗?,python,Python,我有个问题。我试图查看一个文件中有多少个字符和单词,但我有三个bug。 代码: file=“file.test” f=打开(文件“r”) numberWords=0 字符数=0 字符=[ “a”, “b”, "c",, “d”, "e",, "f",, ‘g’、‘h’、‘i’、‘j’、‘k’、‘l’、‘m’、‘n’、‘o’、‘p’、‘q’、‘r’、‘s’、‘t’、‘u’、‘v’、‘w’、‘x’、‘y’、‘z’ ‘A’、‘B’、‘C’、‘D’、‘E’、‘F’、‘G’、‘H’、‘I’、‘J’、‘K’

我有个问题。我试图查看一个文件中有多少个字符和单词,但我有三个bug。 代码:

file=“file.test”
f=打开(文件“r”)
numberWords=0
字符数=0
字符=[
“a”,
“b”,
"c",,
“d”,
"e",,
"f",,
‘g’、‘h’、‘i’、‘j’、‘k’、‘l’、‘m’、‘n’、‘o’、‘p’、‘q’、‘r’、‘s’、‘t’、‘u’、‘v’、‘w’、‘x’、‘y’、‘z’
‘A’、‘B’、‘C’、‘D’、‘E’、‘F’、‘G’、‘H’、‘I’、‘J’、‘K’、‘L’、‘M’、‘N’、‘O’、‘P’、‘Q’、‘R’、‘S’、‘T’、‘U’、‘V’、‘W’、‘X’、‘Y’、‘Z’、‘1、2、3、4、5、6、7、8、9、0’、‘@’、‘#、‘#、‘美元’、‘百分’、‘^’、‘和’、‘和’、‘和’、‘*’、‘U’、‘和’、‘U’、‘和’
, '}', '|', ':', '', '?', '`', '[', ']', '\\', ';', '\'', '"', ',', '>', '/'
]
对于f中的行:
就我而言:
如果i==''或i='\n'或i='\t':
numberWords+=1
f、 readline()
如果我在chars\u lst中:
字符数+=1
f、 readline()
f、 关闭()
打印(字符、数字词)
错误1 第一个错误是,当我放置一个空格时,它应该读取
空格
,但它没有,我如何解决这个问题?正如您所看到的,我尝试添加
.readline()
,但它仍然不起作用

错误2 它不是在一个文件中读取多行。我尝试添加
\n
以使其可读,但没有解决问题,现在我不知道该怎么办

错误3 每次运行程序时,我都会得到以下输出:
80


为什么会这样?

你的主要问题似乎在这里

for line in file:
应该是

for line in f:

因为
f
是您从
f=open(文件'r')获得的句柄
,而
文件
只是一个字符串
'file.test'
。readline
只读取第一行,或者您告诉它读取的任何行,但是,
。readlines
将读取文件中的所有行。我相信如果您尝试使用
.readlines
而不是
.readline
,这个问题应该得到解决。第一个问题是,嵌套for循环不是迭代您创建的文件处理程序(
f
),而是迭代字符串
文件

这会导致在字符
'f'、'i'、'l'、'e'、'、't'、'e'、's'、't'
上循环,而不是在文件中的每一行上循环,然后在每一行中循环每个字符。这不会使内部循环崩溃的原因是,在Python中,单个字符串仍然是不可写的,因此您仍然可以在其上循环de然后对“file.test”中的8个文本字符和0个空白字符进行计数,这就是为什么无论文件的内容如何,都会显示(8,0)的结果

如果你改为迭代文件处理程序而不是文件名,你会更接近你想要的行为

对于f中的行:
就我而言:
#在这里做事。

readline()
readline()
都返回从文件中读取的内容,除非捕获此输出(通常通过将其分配给变量),Python将毫无怨言地丢弃返回值。

我将把
.readlines
放在哪里?我尝试将它放在第一个for循环的开始位置,但没有起作用。请让我在其他位置重试。在开始测试for之前,应该将它放在哪里letters@elipie你不应该把两件事混在一起。或者你用
作为f中的行:构造或
f.readline
,不要同时使用两者time@elipie它有用吗?你也应该摆脱
f.readline()
,因为它实际上不应该在那里是的,现在我怎么能读多行呢?@elipie你的代码已经(应该)了读取多行。
对于f:
中的行,是文件中所有行的循环。嗯,当我在文件中输入:``hi``-应该是多行,输出的方式是:1