пропускать конечные строки, содержащие строку, при чтении текстового файла с numpy для создания числового массива - PullRequest
6 голосов
/ 25 октября 2011

Я пытаюсь создать массив для чтения текстового файла из Интернета.

Моя цель - использовать Python вместо MATLAB, чтобы заменить этот шаг в MATLAB:

url=['http://www.cdc.noaa.gov/Correlation/amon.us.long.data'];
urlwrite(url,'file.txt');

Я использую этот код:

urllib.urlretrieve('http://www.cdc.noaa.gov/Correlation/amon.us.long.data', '/Users/epy/file2.txt')
a = np.loadtxt('/Users/epy/file2.txt', skiprows=1, dtype=None)

Но он не работает из-за текстового описания в конце файла.

Знаете ли вы, существует ли способ пропустить строки X вконец, или я должен использовать какое-то манипулирование строками (readlines?) вместо этого?

Ответы [ 2 ]

10 голосов
/ 25 октября 2011

Для более сложной загрузки текста, посмотрите на numpy.genfromtxt.

Это медленнее, чем numpy.loadtxt, но более гибко.

В вашем случае (я избегаю сохранения временного файла здесь ...):

import numpy as np
import urllib2

url = 'http://www.cdc.noaa.gov/Correlation/amon.us.long.data'
data = np.genfromtxt(urllib2.urlopen(url), skip_header=1, skip_footer=4)
1 голос
/ 09 августа 2018

для тех, кто когда-либо приезжал сюда в эти дни, намного проще (np.loadtxt также может получить генератор):

вместо

a = np.loadtxt('/Users/epy/file2.txt', skiprows=1, dtype=None)

просто напишите

a = np.loadtxt(open('/Users/epy/file2.txt','rt').readlines()[:-1]), skiprows=1, dtype=None)

также пропустит последнюю строку

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