从.txt或.csv Python

时间:2017-02-16 08:20:37

标签: python csv extract

我需要从很多.txt和.csv文件中提取前两行和最后一行。如何允许用户选择一个文件并输出一个新的.txt或.csv文件,只包含这3行?

4 个答案:

答案 0 :(得分: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)

答案 1 :(得分: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

第一行很容易阅读,但最后一行很难阅读。 对它来说,行很慢。

答案 2 :(得分:0)

我认为您也可以使用bash脚本来实现此要求。

#!/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中。

答案 3 :(得分:0)

通过这种方式,您可以返回想要的行,只是要在范围内播放的问题

df=open(r"D:\...\nameFile.txt",encoding='utf8')

def etiqueta(df):
    lista=[]
    for line,x in zip(df,range(0,2)):
        lista.append(line)
    return lista

etiqueta(df)