Как читать количество данных или специфических линий в Пайтоне?

У меня есть файл .lis , .txt или .csv и я нуждаюсь в том, чтобы взять из одинокого количество данных или линий и опускать остальные данные, которые он только берет данные, которые находятся между этими линиями или желанными словами; или скорее: как я идентифицирую слово или линию, и что начиная с этой показал мне линии или данные до другого слова или линии, где идет заканчиваться?

До одинокого момента я смог читать файл с этим кодом:

abrir = open('clase1.lis','r')
while True:
      linea = abrir.readline()
      if not linea: break
      print linea 

Другая форма, которую он попробовал, была:

abrir = open('clase1.lis','r')
for q in abrir:
    print q

И другие, что то, что они делают, состоит в том, чтобы показывать мне весь файл или печатать мне все данные на экране. Но поскольку я это сказал ранее только, я нуждаюсь в блоке этого файла. Файл очень большой.

11
задан 07.08.2019, 06:51
3 ответа

Если файл большой, тебе следует читать это линия из-за линии вместо того, чтобы загружать весь файл в памяти. Например со следующим archivo.txt:

--------------------------
Hola me llamo Cesar
Soy de Lima
Me gusta Python
--------------------------
Hola me llamo Juan
Yo no soy de Lima
Odio Python
--------------------------
Hola me llamo Jose
Vivo cerca a Lima
Nunca he usado Python
--------------------------

И ища основной palabre Lima, ты можешь получать все линии, где было выполнено это условие:

palabra = 'Lima'
ocurrencias = []
with open('archivo.txt') as lineas:
    for linea in lineas:
        if palabra in linea:
            ocurrencias.append(linea)
print ocurrencias

Или что-то более компактное используя filter:

palabra = 'Lima'
ocurrencias = filter(lambda line: palabra in line, open('archivo.txt').readlines())
print ocurrencias

Для обоих случаев результат будет списком с расположенными напротив линиями:

['Soy de Lima\n', 'Yo no soy de Lima\n', 'Vivo cerca a Lima\n']
3
ответ дан 03.12.2019, 22:44
  • 1
    большое спасибо Прекращаться, но не является одиноким выбирать линии где est и # 225; n ключевые слова он состоит в том, чтобы читать файл и печатать только, откуда появляется слово или линия до другого линия, или слово было бы как то, чтобы брать фрагмент файла, но всех способ большое спасибо, я не присоединяю пример файла, из-за которого слишком большой и не, что пример иллюстрировал правильно то, что я хочу сказать спасибо. – Yeison Ordoñez 31.03.2016, 20:43
  • 2
    @YeisonOrdo и # 241; ez в любом случае простой пример достаточен, чтобы понимать то, чего ты хочешь добиться – César 31.03.2016, 21:28

Предполагая иметь в твоем файле .csv с контентом:

Irlanda,33°02'N,128°12'W
Rumania,33°03'N,128°25'W
Colombia,12°43'46?N,54°02'11?W
Los Angeles,34°03'N,118°15'W
Panama,40°42'46?N,74°00'21?W
Paris,48°51'24?N,2°21'03?E
Munchen,42°53'24?N,22°21'33?E
Mexico,30°42'36?N,44°00'21?W
Paris,48°51'24?N,2°21'03?E
Colombia,32°42'36?N,34°04'21?W

ты Можешь создавать функцию, чтобы извлекать реестры с контентом, что ты желаешь

lista = [];

def buscaPalabra(str, file):       
    for line in file:        
        for part in line.split():            
            if str in part:                
                lista.append(line);
    return lista

после того, как Например ищешь "Колумбию"

file = open('C:\Data\datos.csv','r')
print buscaPalabra("Colombia", file)

, obtendrГ-схвати совпадения "Колумбии":

['Colombia,12°43'46?N,54°02'11?W \n', 'Colombia,32°42'36?N,34°04'21?W \n']
3
ответ дан 03.12.2019, 22:44

Мы протестируем один pequeГ±o прием: каждый объект file ведет себя как iterador , с которым ты можешь пробегать файл lГ-nea в lГ-nea. Чтобы получать текст между двумя lГ-neas (n,m) ты можешь использовать прибыли для iteradores mГіdulo itertools:

import itertools

with open("datos.txt") as data:
    texto = itertools.islice(data, n, m)

    for linea in texto:
        ....

, Если, что поиски - происшествия palabra в каких-то lГ-neas:

import itertools

with open("datos.txt") as data:
    ocurrencias = (linea for linea in data if palabra in linea)

    for linea in ocurrencias:
        ....

Даже сочетать оба:

import itertools

with open("datos.txt") as data:
    texto = itertools.islice(data, n, m)
    ocurrencias = (linea for linea in texto if palabra in linea)

    for linea in ocurrencias:
        ....
3
ответ дан 03.12.2019, 22:44