将基于网络的 .txt 文件导入 python

import web based .txt file into python

我认为这很简单,但我找不到有效的答案。数据导入似乎有效,但下面没有分隔“/”数字的代码。感谢您的帮助。

import urllib.request
opener = urllib.request.FancyURLopener({})
url = "http://jse.amstat.org/v22n1/kopcso/BeefDemand.txt"
f = opener.open(url)
content = f.read()
# below are the 3 different ways I tried to separate the data
content.encode('string-escape').split("\x")
content.split('\r')
content.split('\') 

只需使用csv.readercsv.DictReader来解析内容。确保将分隔符设置为制表符,在本例中为:

import requests
import csv
import re

url = "http://jse.amstat.org/v22n1/kopcso/BeefDemand.txt"

response = requests.get(url)
response.raise_for_status()

text = re.sub("\t{1,}", "\t", response.text)

reader = csv.DictReader(text.splitlines(), delimiter="\t")
for row in reader:
    print(row)

在这种情况下,我更喜欢 csv.DictReader,因为它会为您消耗 header 行,并且每个“行”都是一个字典。您的特定文本文件有时会用重复的制表符分隔字段以使其看起来更漂亮,因此您必须以某种方式考虑到这一点。在我的代码片段中,我使用正则表达式将所有 tab-clusters 替换为单个选项卡。

我强烈推荐 Pandas 阅读和分析此类文件。它支持直接从 url 读取,还提供有意义的分析能力。

import pandas
url = "http://jse.amstat.org/v22n1/kopcso/BeefDemand.txt"

df = pandas.read_table(url, sep="\t+", engine='python', index_col="Year")

请注意,您在该文件中有多个重复的制表符作为分隔符,由 sep="\t+" 处理。重复还意味着您必须使用 python 引擎。

现在文件已读入数据帧,我们可以进行简单的绘图,例如:

df[['ChickPrice', 'BeefPrice']].plot()