使用readlines()打印CSV文件的每行

jvlzgdj9  于 2023-01-28  发布在  其他
关注(0)|答案(3)|浏览(145)

我正在尝试打印csv文件的每一行,并记录正在打印的行数。

with open('Polly re-records.csv', 'r',encoding='ISO-8859-1') as file:   #file1 path
    ct=0
    while True:
        ct+=1
        if file.readline():
            print(file.readline(),ct)
        else:
            break    #break when reaching empty line

对于上面的代码,我得到了以下输出:

lg1_1,"Now lets play a game. In this game, you need to find the odd one out.",,,,,,,,,,,,,,,,,,,,,,,,
 479
sc_2_1,Youve also learned the strong wordsigns and know how to use them as wordsigns. ,,,,,,,,,,,,,,,,,,,,,,,,
 480

因此,在我的输出中,第一个值直接是479,而不是从1开始的ct,除非if语句执行478次,否则这是不可能的
我应该做什么更改或者什么逻辑缺陷阻止了print语句的执行

eagi6jfj

eagi6jfj1#

import csv
with open("data.csv", 'r') as file:
    csvreader = csv.reader(file)
    header = next(csvreader)
    for x in range(len(csvreader)):
        print(csvreader[x], x)

另外,您还可以使用其他方法作为enumerate

xdyibdwo

xdyibdwo2#

利用一些python方法(如enumerate())可能会更容易

with open("Polly re-records.csv", "r") as file_in:
    for row_number, row in enumerate(file_in, start=1):
        print(row_number, row.strip("\n"))

至于您可能更改哪些内容并保留代码,您遇到的问题是调用readline()太频繁,并且丢弃了一半的结果。

with open('Polly re-records.csv', 'r',encoding='ISO-8859-1') as file:   #file1 path
    ct=0
    while True:
        ct+=1
        row = file_in.readline().strip()
        if row:
            print(row, ct)
        else:
            break    #break when reaching empty line
mcdcgff0

mcdcgff03#

Python为你的用例提供了有用的内置函数,例如enumerate,它为可迭代对象中的每一项产生一个连续的计数。

with open('Polly re-records.csv', 'r', encoding='ISO-8859-1') as file:
    for line_number, line in enumerate(file):
        print(line, line_number)

正如drdalle所指出的,使用内置的csv module也可能是一个更好的主意,因为它也可以处理csv编码(例如,如果您有多行单元格包含\n Package 或其他转义值)。

相关问题