我是Python的新手,我对这些库没有多少经验。 我正在尝试使用我的货币转换器程序的“请求”模块从'www.bankofcanada.com'获取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)
P.s:我知道代码有很多改进,比如不使用绝对路径和...... 这仅用于调试目的
答案 0 :(得分:1)
您在写完文件后没有关闭文件,因此没有任何内容可供阅读。您需要为所有文件操作*执行此操作。使用with open
表单让Python自动处理:
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' (作为一件好事),他们所指的其中一件事就是使用这些内置快捷方式,而不是自己动手。
*文件需要打开并关闭,以便安全地编写(和读取)文件。作为一个用户,我们总是为我们处理结束,因此只能在打开文件时轻松思考,而作为程序员我们处理较低级别的操作。当您写入文件时,在关闭文件之前,实际上没有任何内容被写入,即使看起来您正在循环中一次写入一行。这有助于防止文件内容被其他进程破坏。