我可以使用Django表单成功上传和访问CSV文件,并循环遍历文件中的行。但是,第一行包含列标题,当代码开始读取文件时,它们会以某种方式跳过。
from io import TextIOWrapper
if request.method == 'POST':
form = UploadFileForm(request.POST, request.FILES)
if form.is_valid():
csvfile = TextIOWrapper(request.FILES['file'], encoding="utf-8")
logger.info('Position: {}'.format(csvfile.tell())) # <-- This returns 0
for line in csvfile:
logger.info('line: {}'.format(line)) # <-- The first iteration actually logs the second line in the CSV file.
什么会导致第一次调用for
循环中的文件返回文件中的第二行?
答案 0 :(得分:0)
您的代码看起来像文件,但我不确定它为什么不起作用。您可以发布样本CSV文件,也可以尝试使用Python的CSV阅读器。这是一个比io更好的图书馆。请参阅下面的示例。
假设您的文件看起来像这样。
std::vector<uint8_t> newVec(oldvec.begin(),oldvec.end());
这段代码可以给你一两个想法:
workers,constant,age
w0,7.334,-1.406
w1,5.235,-4.936
w2,3.2225,-1.478
w3,0,0
您可以使用.next()函数获取标题,然后您可以遍历行以获取后续行中的值。
答案 1 :(得分:0)
问题最终出现在上传的CSV文件中。打开测试CSV文件以清除数据并在发布之前以新名称重新保存数据后,我能够从清理的CSV文件中读取列标题行。
原始来源CSV是来自Excel的电子邮件CSV导出。在LibreOffice Calc中打开CSV并重新保存为CSV文件,删除几个隐藏的字符。