импортировать веб-файл .txt в 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('\\') 

person johnsmith_228    schedule 10.07.2020    source источник
comment
Не могли бы вы предоставить образец содержимого переменных, которое вы используете?   -  person Alejandro A    schedule 10.07.2020
comment
Начало веб-пула ниже Out[265]: b'Year\tChickPrice\tBeefPrice\tBeefConsump\tCPI\tDPI\tRealChickenPrice\tRealBeefPrice\tRealDPI\t\t(RDPI-Mean)^sq\n1965\t37.24500733\ т59,5\т\т99,5\т\т31,5\т2505\т118,2381185\т\т188,8888889\т7952,380952\т63240362,81\n1966\т39,44150776\т62,2\т\т104. 1\t\t32.4\t2675\t121.7330486\t\t191.9753086\t8256.17284\t68164389.96\n1967\t36.38550716\t60.7\t\t106.5\t\t33.4\ т2828\т108.9386442\т\т181.7365269\т8467.065868\т71691204.42\n1968\т38.00900748\т63.5\т\т109.7\т\т34.8\т3037\т109.2212859\   -  person johnsmith_228    schedule 10.07.2020
comment
Контент — это данные, извлеченные из URL-адреса в Интернете.   -  person johnsmith_228    schedule 10.07.2020


Ответы (2)


Я настоятельно рекомендую 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()

результат сюжета

person chthonicdaemon    schedule 10.07.2020

Просто используйте csv.reader или csv.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, потому что он использует для вас строку заголовка, а каждая строка является словарем. Ваш конкретный текстовый файл иногда разделяет поля с повторяющимися вкладками, чтобы он выглядел красивее, поэтому вам придется каким-то образом это учитывать. В своем фрагменте я использовал регулярное выражение, чтобы заменить все кластеры вкладок одной вкладкой.

person Paul M.    schedule 10.07.2020