2017-02-16 7 views
0

Мне нужно извлечь первые 2 строки и последнюю строку из большого количества файлов .txt и .csv. Как я могу разрешить пользователю выбирать файл, и он выводит новый .txt или .csv файл с этими тремя строками?Извлечение первых двух строк и последней строки из .txt или .csv Python

ответ

1

Это то, что вам нужно:

def extract_lines(filename,outputname): 
    l = [] 
    with open(filename,'r') as f: 
     for index,line in enumerate(f): #This iterates the file line by line which is memory efficient in case the csv is huge. 
      if index < 2: #first 2 lines 
       l.append(line) 
     if index > 1: # means the file has at least 3 lines 
      l.append(line) 
    with open(outputname,'w') as f: 
     for line in l: 
      f.write(line) 
+0

удивительный, спасибо! – mbf94

+0

Спасибо, что приняли мой ответ! –

+0

Во втором случае есть ошибка с отступом, если – Adirio

0

Я думаю, вы также можете использовать Баш скрипт, чтобы выполнить это требование.

#!/bin/bash 

for file in $(find . -name '*.txt' -o -name '*.csv') 
do 
    sed -n -e '1,2p' -e '$p' ${file} > "result"${file:(-5)} 
done 

Этот скрипт будет искать все файлы, заканчивающиеся на txt или csv. И он вырезает первые две строки и последнюю строку, сохранит эти строки в новом файле.

Например, у меня есть три файла с именем file1.txt, file2.txt, file3.csv, он вырезает три строки для каждого файла и сохраняет их в result1.txt, result2.txt, result3.csv соответственно ,

+0

В этом вопросе нет тега 'bash', поэтому ваш ответ неверен ... –

1
def get_lines(filename, front=2, rear=1): 
    result = [] 
    with open(filename, 'rb') as f: 
     for i, val in enumerate(f): 
      if i >= front: 
       break 
      result.append(val) 

     back_pos = -2 
     f.seek(back_pos, 2) # jump to the second end byte 

     rear_count = 0 
     while True: 
      if '\n' in f.read(1): 
       rear_count += 1 

      if rear_count >= rear: 
       result.extend(f.readlines()) 
       break 

      back_pos -= 1 
      f.seek(back_pos, 2) 

    return result 

Легко прочитать первый ряд, но трудно прочитать последнюю строку. К строкам итератора очень медленно.

 Смежные вопросы

  • Нет связанных вопросов^_^