импортировать веб-файл .txt в python - PullRequest
1 голос
/ 10 июля 2020

Я думаю, что это просто, но я не могу найти ответ, который работает. Импорт данных, кажется, работает, но разделение чисел «/» не приводит к кодированию ниже. спасибо за помощь.

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

Ответы [ 2 ]

2 голосов
/ 10 июля 2020

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

сюжетный результат

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...