У меня есть файл .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
И другие, что то, что они делают, состоит в том, чтобы показывать мне весь файл или печатать мне все данные на экране. Но поскольку я это сказал ранее только, я нуждаюсь в блоке этого файла. Файл очень большой.
Если файл большой, тебе следует читать это линия из-за линии вместо того, чтобы загружать весь файл в памяти. Например со следующим 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']
Предполагая иметь в твоем файле .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']
Мы протестируем один 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:
....