提取包含特定名称

时间:2015-05-04 11:44:08

标签: python text-files extraction

我试图用它来处理大型文本文件中的数据。

我有一个包含超过2000列的txt文件,其中约三分之一的标题包含“Net'”字样。我想只提取这些列并将它们写入新的txt文件。关于我如何做到这一点的任何建议?

我已经搜索了一下但是找不到能帮助我的东西。如果之前已经提出并解决了类似的问题,请道歉。

编辑1:谢谢大家!在撰写本文时,3位用户提出了解决方案并且它们都运行良好。老实说,我不认为人们会回答,所以我没有检查一两天,并对此感到高兴。我印象非常深刻。

编辑2:我添加了一张图片,显示原始txt文件的一部分可能是什么样子,以防将来有人帮助:

Sample from original txt-file

2 个答案:

答案 0 :(得分:6)

这样做的一种方法是,如果没有安装像numpy / pandas这样的第三方模块,如下所示。给定一个输入文件,称为“input.csv”,如下所示:

A,B,c_net,d,e_net

0,0,1,0,1

0,0,1,0,1

(删除其间的空行,它们只是用于格式化 这篇文章的内容)

以下代码可以满足您的需求。

import csv


input_filename = 'input.csv'
output_filename = 'output.csv'

# Instantiate a CSV reader, check if you have the appropriate delimiter
reader = csv.reader(open(input_filename), delimiter=',')

# Get the first row (assuming this row contains the header)
input_header = reader.next()

# Filter out the columns that you want to keep by storing the column
# index
columns_to_keep = []
for i, name in enumerate(input_header):
    if 'net' in name:
        columns_to_keep.append(i)

# Create a CSV writer to store the columns you want to keep
writer = csv.writer(open(output_filename, 'w'), delimiter=',')

# Construct the header of the output file
output_header = []
for column_index in columns_to_keep:
    output_header.append(input_header[column_index])

# Write the header to the output file
writer.writerow(output_header)

# Iterate of the remainder of the input file, construct a row
# with columns you want to keep and write this row to the output file
for row in reader:
    new_row = []
    for column_index in columns_to_keep:
        new_row.append(row[column_index])
    writer.writerow(new_row)

请注意,没有错误处理。至少应该处理两个。第一个是检查输入文件是否存在(提示:检查os和os.path模块提供的功能)。第二个是处理具有不一致列数的空白行或行。

答案 1 :(得分:3)

您可以使用pandas过滤器功能根据正则表达式选择几列

data_filtered = data.filter(regex='net')