Мне нужно извлечь первые 2 строки и последнюю строку из большого количества файлов .txt и .csv. Как я могу разрешить пользователю выбирать файл, и он выводит новый .txt или .csv файл с этими тремя строками?Извлечение первых двух строк и последней строки из .txt или .csv Python
ответ
Это то, что вам нужно:
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)
Я думаю, вы также можете использовать Баш скрипт, чтобы выполнить это требование.
#!/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 соответственно ,
В этом вопросе нет тега 'bash', поэтому ваш ответ неверен ... –
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
Легко прочитать первый ряд, но трудно прочитать последнюю строку. К строкам итератора очень медленно.
удивительный, спасибо! – mbf94
Спасибо, что приняли мой ответ! –
Во втором случае есть ошибка с отступом, если – Adirio