所以我试图迭代一个.csv文件并根据它进行一些计算,我的问题是文件长10001行,当我的程序执行它时,似乎只读取这些行的5001。我在阅读我的数据时做错了什么,或者是否存在内存限制或某些其他限制?计算很好,但在某些情况下它们与预期结果不符,因此我认为缺少的一半数据将解决这个问题。
fileName = 'normal.csv' #input("Enter a file name: ").strip()
file = open(fileName, 'r') #open the file for reading
header = file.readline().strip().split(',') #Get the header line
data = [] #Initialise the dataset
for index in range(len(header)):
data.append([])
for yy in file:
ln = file.readline().strip().split(',') #Store the line
for xx in range(len(data)):
data[xx].append(float(ln[xx]))
这里有一些示例输出,但尚未完成格式化,但最终会:
"""The file normal.csv contains 3 columns and 5000 records.
Column Heading | Mean | Std. Dev.
--------------------+--------------------+--------------------
Width [mm]|999.9797|2.5273
Height [mm]|499.9662|1.6889
Thickness [mm]|12.0000|0.1869"""
由于这是家庭作业,我会要求您尝试保持回复有用但不完全是解决方案,谢谢。
答案 0 :(得分:2)
那是因为你要求Python在两个不同的位置读取行:
for yy in file:
和
ln = file.readline().strip().split(',') #Store the line
yy
已经是文件中的行,但您忽略了它;对文件对象进行迭代会从文件中生成行。然后使用file.readline()
读取另一行。
如果您使用迭代,请不要使用readline()
,只需使用yy
:
for yy in file:
ln = yy.strip().split(',') #Store the line
然而,您正在重新发明CSV读取轮。只需使用csv
module代替。
您可以将CSV文件中的所有数据读入每列的列表,其中包含一些zip()
function trickery:
import csv
with open(fileName, 'r', newline='') as csvfile:
reader = csv.reader(csvfile, quoting=csv.QUOTE_NONNUMERIC) # convert to float
header = next(reader, None) # read one row, the header, or None
data = list(zip(*reader)) # transpose rows to columns