2013-09-24 10 views
5

Angenommen, ich habe eine TXT-Datei mit vielen Zeilen und Spalten mit Daten und einer Liste mit ganzzahligen Werten. Wie würde ich die Zeilennummern in der Textdatei laden, die den ganzen Zahlen in der Liste entsprechen?Wie lade ich bestimmte Zeilen aus einer TXT-Datei in Python?

Zur Veranschaulichung, sage ich eine Liste von ganzen Zahlen haben:

a = [1,3,5] 

Wie würde ich nur die Zeilen 1,3 und 5 aus einer Textdatei in ein Array lesen?

Die loadxt-Routine in numpy lässt Sie Zeilen überspringen und bestimmte Spalten verwenden. Aber ich kann nicht scheinen, einen Weg zu finden, etwas entlang der Linien von (ohne Berücksichtigung falsche Syntax) zu tun:

new_array = np.loadtxt('data.txt', userows=a, unpack='true') 

Danke.

+0

Ist die Textdatei zu groß/dauert es zu lange, um sie in den Speicher zu laden? – wflynny

+0

Verwenden Sie 'numpy', um dies zu erreichen, ist eine Anforderung? – Bakuriu

+5

Kannst du nicht ein Standard 'while open (Datei) als fd: für n, Zeile in Enumerate (fd)' Schleife verwenden und wenn 'n' ist alles in' a' tun Sie Ihre Sachen? –

Antwort

5

Angesichts dieser Datei:

1,2,3 
4,5,6 
7,8,9 
10,11,12 
13,14,15 
16,17,18 
19,20,21 

Sie die csv-Modul verwenden können, um die gewünschte np Array zu erhalten:

import csv 
import numpy as np 

desired=[1,3,5] 
with open('/tmp/test.csv', 'r') as fin: 
    reader=csv.reader(fin) 
    result=[[int(s) for s in row] for i,row in enumerate(reader) if i in desired] 

print(np.array(result)) 

Drucke:

[[ 4 5 6] 
[10 11 12] 
[16 17 18]] 
3

einfach auf meinen Kommentar

$ cat file.txt 
line 0 
line 1 
line 2 
line 3 
line 4 
line 5 
line 6 
line 7 
line 8 
line 9 
line 10 

Python erweitern:

#!/usr/bin/env python 

a = [1, 4, 8] 

with open('file.txt') as fd: 
    for n, line in enumerate(fd): 
     if n in a: 
      print line.strip() 

Ausgang:

$ ./l.py 
line 1 
line 4 
line 8 
0

Verwenden CSV module und Files.xreadlines().

  • CSV module: implementiert Klassen tabellarische Daten im CSV-Format zu lesen und

  • Files.xreadlines() schreiben: Rückkehr einen Iterator über die Tasten des Wörterbuchs. Dies ist eine Abkürzung für iterkeys(). Veraltet seit Version 2.3: Verwenden Sie stattdessen for line in file.

0

I Wow ld schlagen vor, line.split() anstelle von line.strip() zu verwenden. line.split() gibt die Liste zurück, die unter Verwendung des Befehls np.asarray einfach in numpy.array konvertiert werden kann.

Verwandte Themen