用python读取CSV文件

2024-06-25 07:09:52 发布

您现在位置:Python中文网/ 问答频道 /正文

filename = 'NTS.csv'
mycsv = open(filename, 'r')
mycsv.seek(0, os.SEEK_END)

while 1:
   time.sleep(1)
   where = mycsv.tell()
   line = mycsv.readline()

if not line:
    mycsv.seek(where)
else:
    arr_line = line.split(',')
    var3 = arr_line[3]

    print (var3)

我有一个Paython代码,它是从一个csv文件读取值,每次有一个新行打印在csv从外部程序。我的问题是csv文件周期性地被完全重写,然后python停止读取新行。我的猜测是python停留在某个行号上,而新的更新可能会增加或减少50行。例如,python现在在第70行等待一个新行,而新行在第95行出现。我认为解决办法是让我的csv.seek(0,操作系统搜索结束)已经更新了,但不知道该怎么做。在


Tags: 文件csvoslineseekopenfilenamewhere
2条回答

如果不每次都倒带文件以确保您确实在最后一行,那么您要做的是很难完成的。如果您知道每行大约有多少个字符,那么您可以使用一个快捷方式我的csv.seek(-结束-buf,操作系统搜索结束),如this answer所述。所以你的代码可以这样工作:

avg_len = 50  # use an appropriate number here
end_buf = 3 * avg_len / 2

filename = 'NTS.csv'
mycsv = open(filename, 'r')
mycsv.seek(-end_buf, os.SEEK_END)
last = mycsv.readlines()[-1]

while 1:

    time.sleep(1)
    mycsv.seek(-end_buf, os.SEEK_END)
    line = mycsv.readlines()[-1]

    if not line == last:

        arr_line = line.split(',')
        var3 = arr_line[3]

        print (var3)

在这里,在while循环的每次迭代中,您都会寻找一个靠近文件末尾的位置,只要足够远,您就可以确定最后一行将包含在剩余的内容中。然后你读所有剩下的行(这可能包括第二行或第三行到最后一行的部分内容),并检查最后一行是否与之前的不同。在

你可以用一种更简单的方法来读取程序中的行。与其尝试使用seek来获得所需的内容,不如尝试在file对象mycsv上使用readlines。在

您可以执行以下操作:

mycsv = open('NTS.csv', 'r')
csv_lines = mycsv.readlines()

for line in csv_lines:
    arr_line = line.split(',')
    var3 = arr_line[3]
    print(var3)

相关问题 更多 >