简体   繁体   中英

Python 3.4.3: Iterating over each line and each character in each line in a text file

I have to write a program that iterates over each line in a text file and then over each character in each line in order to count the number of entries in each line.

Here is a segment of the text file:

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

The first and last lines are "unusable lines" because they contain too many entries (more or less than 25). I would like to count the amount of unusable lines in the file.

Here is my code:

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)

I tried using this method as well:

alldata=file.read()
for line in file:
    student=alldata.split("\n")
    answer=student.split(",")

My problem is each variable I create doesn't exist when I try to run the program. I get a "students" is not defined error.

I know my coding is awful but I'm a beginner. Sorry!!! Thank you and any help at all is appreciated!!!

A simplified code for your method using list,count and if condition

Code:

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)

Notes:

  • Initially I have created a variable to store count of unstable lines unusable_line .
  • Then I iterate over the lines of the file object.
  • Then I split the lines at , to create a list.
  • Then I check if the count of list is less then 26. If so I increment the unusable_line varaiable.
  • Finally I print it.

You could use something like this and wrap it into a function. You don't need to re-iterate the items in the line, str.split() returns a list[] that has your elements in it, you can count the number of its elements with 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))

You can do it much shorter:

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

The line with open('my_fike.txt') as fobj: opens the file for reading and closes it automatically after leaving the indented block. I use a generator expression to go through all lines and add up all that have a length different from 26.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM