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

时间:2015-12-07 06:26:49

标签: 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,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(",")

我的问题是当我尝试运行程序时,我创建的每个变量都不存在。我得到了一个"学生"未定义错误。

我知道我的编码很糟糕,但我是初学者。抱歉!!!谢谢你,任何帮助都表示赞赏!!!

3 个答案:

答案 0 :(得分:0)

使用list,count and if condition

的方法的简化代码

<强>代码:

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)

备注:

  • 最初我创建了一个变量来存储不稳定行unusable_line的数量。
  • 然后我遍历文件对象的行。
  • 然后我将这些行拆分为,以创建一个列表。
  • 然后我检查列表的数量是否小于26.如果是,我增加unusable_line变量。
  • 最后我打印出来。

答案 1 :(得分:0)

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

my_file = open('temp.txt', 'r')
lines_count = usable = ununsable = 0
for line in my_file:
    lines_count+=1
    if len(line.split(',')) == 26:
        usable+=1
    else:
        ununsable+=1
my_file.close()
print("Processed %d lines, %d usable and %d ununsable" % (lines_count, usable, ununsable))

答案 2 :(得分:0)

你可以做得更短:

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

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