Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/305.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Python 3.5中解析在线逗号分隔文本文件_Python_Csv_Urllib_Delimited Text - Fatal编程技术网

在Python 3.5中解析在线逗号分隔文本文件

在Python 3.5中解析在线逗号分隔文本文件,python,csv,urllib,delimited-text,Python,Csv,Urllib,Delimited Text,我猜这是两个问题的组合——阅读在线文本文件,然后将结果解析为列表。我尝试了以下代码,它可以将文件读入字节文件,但无法转换为列表 import urllib CFTC_URL = r"http://www.cftc.gov/dea/newcot/FinFutWk.txt" CFTC_url = urllib.request.urlopen(CFTC_URL) output = CFTC_url.read().decode('utf-8') 与其尝试解析url中的每一行并将其放入csv文件的特定行

我猜这是两个问题的组合——阅读在线文本文件,然后将结果解析为列表。我尝试了以下代码,它可以将文件读入字节文件,但无法转换为列表

import urllib
CFTC_URL = r"http://www.cftc.gov/dea/newcot/FinFutWk.txt"
CFTC_url = urllib.request.urlopen(CFTC_URL)
output = CFTC_url.read().decode('utf-8')

与其尝试解析url中的每一行并将其放入csv文件的特定行中,您只需将其全部放入文本文件中以清理格式,然后从中读取,这看起来可能更有效,但这通常是我从url中获取逗号分隔信息的方法

import requests
URL = "http://www.cftc.gov/dea/newcot/FinFutWk.txt"
r = requests.get(URL,stream=True)
with open('file.txt','w') as W:
    W.write(r.text)
with open('file.txt', 'r') as f:
    lines = f.readlines()

for line in  lines:
    print(line.split(','))
您可以将forloop中的内容交换,将列表保存到列表数组中,以便使用而不是打印它们

content = []
for line in lines:
    content.append(line.split(','))
还要注意的是,在拆分后,您仍然会注意到有些内容后面有相当大的空白,您可以遍历整个列表,对于数组中的每个列表,并删除所有空白,但这会破坏列表中的第一个元素,或者只是将带有空白的数值转换为实际整数,因为它们是作为字符串读入的。那将是你的偏好。如果您有任何问题,请随时在下面添加评论

编辑1: 另一方面,如果不希望保留与内容一起保存的文件,请导入os库,然后在将行读取到行数组中后,删除该文件

import os
os.remove('file.txt')

假设要将文件解释为一个表,则首先要使用获取行。然后,您可以通过再次拆分每一行来获得列

import urllib.request
CFTC_URL = r"http://www.cftc.gov/dea/newcot/FinFutWk.txt"
CFTC_url = urllib.request.urlopen(CFTC_URL)
output = CFTC_url.read().decode('utf-8')
lines = output.split("\r\n"))) # split on newline
print(lines[0]) # first line "CANADIAN DOLLAR ..."
columns_0 = lines[0].split(",") # split on ,
print(columns[0]) # first column of first line
然后,您可以遍历行列表,对于行中的每个条目,您可以遍历列。

您可以使用standart模块和文件内容包装器(例如,用于获取数据的库):

可能重复的
import requests, io, csv

CFTC_URL = r"http://www.cftc.gov/dea/newcot/FinFutWk.txt"
data = io.StringIO(requests.get(CFTC_URL).text)

dialect = csv.Sniffer().sniff(data.read(1024))
data.seek(0)
reader = csv.reader(data, dialect)
for row in reader:
    print(row)