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

Parse online comma delimited text file in Python 3.5

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

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(','))

另请注意,拆分后,您仍然会注意到有内容后面有大量白色 space,您可以 运行 遍历整个列表,对于每个列表在数组中,并删除所有白色 space 但这会破坏列表中的第一个元素,或者只是将具有白色 space 的数值转换为实际整数,因为它们是作为字符串读入的。那将是你的偏好。如果您有任何问题,请随时在下面添加评论。

编辑 1: 另外,如果您不想保留与内容一起保存的文件,请导入 os 库,然后在将行读入行数组后,删除文件。

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

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

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

然后您可以遍历行列表,对于行中的每个条目,您可以遍历列。

您可以使用标准 csv module with StringIO wrapper for file content (example with requests 库获取数据):

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)