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

时间:2016-09-26 13:23:09

标签: 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')

3 个答案:

答案 0 :(得分:2)

您可以将带有csv包装的标准StringIO模块用于文件内容(使用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)

答案 1 :(得分:0)

不是尝试从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库,然后在将行读入lines数组后删除该文件。

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

答案 2 :(得分:0)

假设您要将文件解释为表格,首先要使用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

然后,您可以遍历行列表,并为行中的每个条目迭代列。