阅读csv文件时遇到问题
问题描述:
我是Python的新手,对库的使用经验不多。 我试图从'www.bankofcanada.com'使用“请求”模块为我的货币转换程序获取一个CSV文件。我想读取该文件并解析它以获取货币及其比率,在字典中使用它们。 这两个部分,单独工作就好(我可以得到CSV文件并保存它,并且我可以根据需要解析CSV文件,当有文件时)。我的问题是他们不一起工作,并给我空的结果: (阅读csv文件时遇到问题
import requests
import csv
import os
import time
rates = {
}
os.chdir('C:\\Users\\Caroline\\Desktop')
res = requests.get("http://www.bankofcanada.ca/en/markets/csv/exchange_eng.csv")
csvFile = open('csvFile2.csv','wb')
for chunk in res.iter_content(10000):
csvFile.write(chunk)
fh = open('csvFile2.csv')
fileReader = csv.reader(fh)
fileData = list(fileReader)
actual_data = fileData[7:]
for rows in actual_data:
rates[rows[0]] = rows[-1]
print(rates)
PS:我知道喜欢不使用绝对路径,并有很多改进的代码... 这只是debuggin目的
答
您没有写入后关闭文件所以没有什么可读的,你需要为所有的文件操作完成*。使用with open
表单让Python处理这个utomatically:
with open('csvFile2.csv','wb') as csvfile:
for chunk in res.iter_content(10000):
csvFile.write(chunk)
with open('csvFile2.csv') as fh:
fileReader = csv.reader(fh)
下面是等效的代码手动关闭文件句柄:
csvFile = open('csvFile2.csv','wb')
for chunk in res.iter_content(10000):
csvFile.write(chunk)
csvFile.close()
fh = open('csvFile2.csv')
fileReader = csv.reader(fh)
fh.close()
正如你可以看到它的长与密切。开放的格式也更安全,因为如果你手动执行它,容易忘记关闭文件处理程序。
Python有许多很好的语言特性,旨在使开发人员的生活更轻松,而这些特性并不一定与其他语言具有直接的等价关系。值得了解它们。人们谈论'Idomatic Python'(作为一件好事),他们所说的一件事就是使用这些内置的快捷方式,而不是自己滚动。
*文件需要打开和关闭,以便它们可以安全地写入(并读取)。作为一个用户,关闭总是为我们处理,所以很容易只考虑打开一个文件,而作为程序员我们处理较低级别的操作。当你写入一个文件时,直到你关闭该文件时,实际上没有任何东西被写入它,尽管看起来你是在循环中一次写入一行。这有助于防止文件内容被其他进程破坏。
你是什么意思的“空结果”?你的代码为我创建了一个非空的csv文件。你确定你正在检查正确目录下的文件吗? – ayhan
为什么期望通过'exchange_eng.csv'名称下载的文件只会打开文件名为'csvFile2.csv'的文件? –
@ayhan 它应该是这样的:{'牙买加元':'0.01092','哥伦比亚比索':'0.000418',...} 但是当我打印率时,它是一个空的字典 –