【问题标题】:Parse online comma delimited text file in Python 3.5在 Python 3.5 中解析在线逗号分隔的文本文件
【发布时间】:2017-02-03 20:54:57
【问题描述】:

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

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

【问题讨论】:

标签: python urllib csv


【解决方案1】:

与其尝试解析 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')

【讨论】:

    【解决方案2】:

    假设您想将文件解释为您希望首先使用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
    

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

    【讨论】:

      【解决方案3】:

      您可以使用标准的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)
      

      【讨论】:

        猜你喜欢
        • 2013-04-19
        • 1970-01-01
        • 1970-01-01
        • 2015-01-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-11-29
        • 1970-01-01
        相关资源
        最近更新 更多