所以我试图创建一个使用csv下载链接下载csv文件的函数,然后基本打印它将它划分为行,但是当我需要保存时我遇到了问题
def download_data(csv_url):
response = request.urlopen(csv_url)
csv = response.read()
csv_str = str(csv)
lines = csv_str.split("\\n")
dest_url = r'data.csv'
fx = open(dest_url, 'r')
for line in lines:
fx.write(line + '/n')
fx.close()
当我给它csv链接时,它告诉我它找不到文件/目录“data.csv”,即使我应该下载它。 运行Mac os
答案 0 :(得分:0)
您正在阅读该文件。将'r'
中的fx = open(dest_url, 'r')
更改为'w'
。
fx = open(dest_url, 'w')
作为旁注,你真的应该使用with
statement。一旦代码离开with
范围,with
将使文件对象关闭连接。这样您就不必担心关闭连接。
def download_data(csv_url):
response = request.urlopen(csv_url)
with open('data.csv', 'w') as f:
f.write(str(response.read()))
如果您只是想要阅读并在屏幕上显示内容,那么根本不需要保存文件。只需download_data
返回csv_str
。
最后看看内置csv module。它让生活变得轻松。
import csv
from io import StringIO
import requests
def download_data(csv_url):
return csv.reader(
StringIO(
requests.get(csv_url)
.text
), delimiter=','
)
for row in download_data('https://people.sc.fsu.edu/~jburkardt/data/csv/addresses.csv'):
print("| {} |".format(str(' | '.join(row))))
# Prints:
#
# | John | Doe | 120 jefferson st. | Riverside | NJ | 08075 |
# | Jack | McGinnis | 220 hobo Av. | Phila | PA | 09119 |
# | John "Da Man" | Repici | 120 Jefferson St. | Riverside | NJ | 08075 |
# | Stephen | Tyler | 7452 Terrace "At the Plaza" road | SomeTown | SD | 91234 |
# | | Blankman | | SomeTown | SD | 00298 |
# | Joan "the bone", Anne | Jet | 9th, at Terrace plc | Desert City | CO | 00123 |