Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/286.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 3.4.3:迭代文本文件中的每一行和每一行中的每个字符_Python_Text Files - Fatal编程技术网

Python 3.4.3:迭代文本文件中的每一行和每一行中的每个字符

Python 3.4.3:迭代文本文件中的每一行和每一行中的每个字符,python,text-files,Python,Text Files,我必须编写一个程序,在文本文件的每一行上迭代,然后在每一行中的每个字符上迭代,以便计算每一行中的条目数 以下是文本文件的一段: N00000031,B,,D,D,C,B,D,A,A,C,D,C,A,B,A,C,B,C,A,C,C,A,B,D,D,D,B,A,B,A,C,B,,,C,A,A,B,D,D N00000032,B,A,D,D,C,B,D,A,C,C,D,,A,A,A,C,B,D,A,C,,A,B,D,D N00000033,B,A,D,D,C,,D,A,C,B,D,B,A,B,C,C,

我必须编写一个程序,在文本文件的每一行上迭代,然后在每一行中的每个字符上迭代,以便计算每一行中的条目数

以下是文本文件的一段:

N00000031,B,,D,D,C,B,D,A,A,C,D,C,A,B,A,C,B,C,A,C,C,A,B,D,D,D,B,A,B,A,C,B,,,C,A,A,B,D,D
N00000032,B,A,D,D,C,B,D,A,C,C,D,,A,A,A,C,B,D,A,C,,A,B,D,D
N00000033,B,A,D,D,C,,D,A,C,B,D,B,A,B,C,C,C,D,A,C,A,,B,D,D
N00000034,B,,D,,C,B,A,A,C,C,D,B,A,,A,C,B,A,B,C,A,,B,D,D
第一行和最后一行是“不可用行”,因为它们包含的条目太多(多于或少于25条)。我想计算文件中不可用行的数量

这是我的密码:

for line in file:
    answers=line.split(",")

i=0
for i in answers:
    i+=1

unusable_line=0
for line in file:
    if i!=26:
        unusable_line+=1
print("Unusable lines in the file:", unusable_line)
我也尝试过使用这种方法:

alldata=file.read()
for line in file:
    student=alldata.split("\n")
    answer=student.split(",")
我的问题是,当我试图运行程序时,我创建的每个变量都不存在。我得到一个“学生”没有定义的错误


我知道我的编码很糟糕,但我是个初学者。很抱歉谢谢你,非常感谢你的帮助

使用
列表、计数和if条件的方法的简化代码

代码:

unusable_line = 0
for line in file:
    answers = line.strip().split(",")
    if len(answers) < 26:
        unusable_line += 1
print("Unusable lines in the file:", unusable_line)
不可用_行=0
对于文件中的行:
answers=line.strip().split(“,”)
如果len(答案)<26:
不可用的_线+=1
打印(“文件中不可用的行:”,不可用的_行)
注意事项:

unusable_line = 0
for line in file:
    answers = line.strip().split(",")
    if len(answers) < 26:
        unusable_line += 1
print("Unusable lines in the file:", unusable_line)
  • 最初,我创建了一个变量来存储不稳定行的计数
    不可用的行
  • 然后我迭代文件对象的行
  • 然后我将
    处的行拆分以创建一个列表
  • 然后我检查列表的计数是否小于26。如果是这样,我会增加
    不可用_行
    变量
  • 最后我把它打印出来了

您可以使用类似的东西,并将其包装成函数。您不需要重新迭代行中的项目,
str.split()
返回一个包含您的元素的
list[]
,您可以使用
len()


你可以做得更短:

with open('my_fike.txt') as fobj:
    unusable = sum(1 for line in fobj if len(line.split(',')) != 26)

带有open('my_fike.txt')作为fobj:的行
打开文件进行读取,并在离开缩进块后自动关闭。我使用生成器表达式遍历所有行,并将长度不同于26的所有行相加。

这是因为缩进在python中很重要。你的缩进有点不对劲。但你的主要问题是你已经在这里用完了
alldata=file.read()
,当你对文件中的行执行
时:
文件对象中没有对象,因此循环即使执行一次也不会执行,因此没有创建
学生或答案变量