读取csv文件时遇到问题

时间:2016-03-14 21:07:12

标签: python csv python-requests

我是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:我知道代码有很多改进,比如不使用绝对路径和...... 这仅用于调试目的

1 个答案:

答案 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' (作为一件好事),他们所指的其中一件事就是使用这些内置快捷方式,而不是自己动手。

*文件需要打开关闭,以便安全地编写(和读取)文件。作为一个用户,我们总是为我们处理结束,因此只能在打开文件时轻松思考,而作为程序员我们处理较低级别的操作。当您写入文件时,在关闭文件之前,实际上没有任何内容被写入,即使看起来您正在循环中一次写入一行。这有助于防止文件内容被其他进程破坏。