Python 3.4 3中的数据组织

Python 3.4 3中的数据组织,python,Python,在Python中,我使用这个文件Criteria.txt,它看起来像这样 Homework,5,10,10 Quiz,3,20,20 Midterm,1,50,30 Final,1,100,40 我输入了这段代码来打开和操作Criteria.txt文件 criteria=open('Criteria.txt','r') criteria_line=criteria.readline() for criteria_line in criteria: print (crit

在Python中,我使用这个文件Criteria.txt,它看起来像这样

Homework,5,10,10

Quiz,3,20,20

Midterm,1,50,30

Final,1,100,40
我输入了这段代码来打开和操作Criteria.txt文件

criteria=open('Criteria.txt','r')
criteria_line=criteria.readline()



for criteria_line in criteria:
      print (criteria_line),
      criteria_myline = criteria_line.strip().split(',')
      print ("Assignment Type: "+criteria_myline[0])
      print ("Number: "+ criteria_myline [1])
      print ("Points: "+ criteria_myline [2])
      print ("Weight: "+ criteria_myline [3])
      print ()
结果是这样

(None,)

Assignment Type: Quiz

Number: 3

Points: 20

Weight: 20

Midterm,1,50,30

(None,)

Assignment Type: Midterm

Number: 1

Points: 50

Weight: 30

Final,1,100,40

(None,)

Assignment Type: Final

Number: 1

Points: 100

Weight: 40
这一切都是正确的,只是作业没有出现。您可以在
Criteria.txt
文件中看到,家庭作业是列表中的第一种作业类型。这个代码有什么问题?为什么不写作业

线路

criteria_line=criteria.readline()
阅读第一行,其中包含
作业
。在以下
for
循环中,您立即放弃第一个结果。

criteria_line=criteria.readline()

阅读第一行,其中包含
作业
。在下面的
for
循环中,您将立即放弃第一个结果。

发生这种情况是因为您在for循环开始之前读取了文件的第一行。这会导致文件对象中的光标移动到下一行,因此当您在criteria
中迭代criteria\u行时,您将排除第一行(包含作业的那一行)。如果你拆下这条线

criteria_line = criteria.readline()
它应该会起作用


这一切都是有效的,因为文件对象是iterable,默认情况下python将在文件中的行上迭代。

发生这种情况是因为您在for循环开始之前读取了文件的第一行。这会导致文件对象中的光标移动到下一行,因此当您在criteria
中迭代criteria\u行时,您将排除第一行(包含作业的那一行)。如果你拆下这条线

criteria_line = criteria.readline()
它应该会起作用


这一切都是有效的,因为文件对象是一个iterable,默认情况下python将在文件中的行上迭代。

当您
criteria\u line=criteria.readline()
时,您已经从文件对象
criteria
中使用了一行,即
作业,5,10,10
,修复方法是在需要时读取
for
循环中的数据,并作为旁注使用
上下文打开文件,以实现更好、更安全的编码:

with open('Criteria.txt') as criteria    
    for criteria_line in criteria:
        #print (criteria_line) #for debugging
        criteria_myline = criteria_line.strip().split(',')
        print ("Assignment Type: "+criteria_myline[0])
        print ("Number: "+ criteria_myline [1])
        print ("Points: "+ criteria_myline [2])
        print ("Weight: "+ criteria_myline [3])
        print ()

当您
criteria\u line=criteria.readline()
时,您已经从文件对象
criteria
中消耗了一行,这是
作业,5,10,10
,修复方法是在需要
for
循环的
数据时读取,并作为旁注,使用
with
上下文打开文件以获得更好更安全的编码:

with open('Criteria.txt') as criteria    
    for criteria_line in criteria:
        #print (criteria_line) #for debugging
        criteria_myline = criteria_line.strip().split(',')
        print ("Assignment Type: "+criteria_myline[0])
        print ("Number: "+ criteria_myline [1])
        print ("Points: "+ criteria_myline [2])
        print ("Weight: "+ criteria_myline [3])
        print ()

杰出的非常感谢。杰出的非常感谢。