选择某个值然后输出

时间:2016-05-03 21:39:46

标签: python python-2.7

我有一个包含混合信息的文件,而我只需要它们的某些列。

以下是我的示例文件。

A B C D       
1 2 3 abcdef   
5 6 7 abcdef  
1 2 3 abcdef  

我想提取文件以获取我需要的信息。例如,在我的输出文件中如下所示。

A C D       # I only need A, C, and D column.
1 3 ab      # For D column, I only need ab.
5 7 ab      
1 3 ab 

它不是csv或txt文件,但每列之间有空格。

3 个答案:

答案 0 :(得分:6)

您仍然可以使用分隔符kwarg读取带有csv模块的空格分隔文件:

<?php
//  REMOVES ONLY BRITISH CURRENCY: £ 
<meta itemprop="price" content="<?php echo str_replace('£', '', $special); ?>"/>

答案 1 :(得分:1)

如果你想做一些管理数据结构的事情,最简单的事情就是使用python库来简化工作。

您可以使用Pandas Lib:Python数据分析库快速将文件解析为DataFrame,提供制作所需内容的方法。

你还需要Numpy lib,因为as_matrix方法(下面)返回一个numpyArray。

您可以将数据文件视为以空格作为分隔符的csv(逗号分隔值)文件。

使用pd,您可以使用read_csv轻松解析文件:

import pandas as pd
import numpy as np
dataFrame = pd.read_csv("file.txt", sep = ' ')

要选择列,请使用as_matrix方法:

selection = dataFrame.as_matrix((A,C,D))

然后您可能希望将其强制转换回dataFrame以继续使用其方法:

newDataFrame = pd.DataFrame(selection)

删除D列中“abcdef”值的“cdef”看起来像是可以通过简单的 for 解决的问题,并使用[ String ] [ 5] Python提供的方法。它是一个非常特殊的指令,我不知道任何实现这个的库的实现方法。

我希望我帮助过你。

PD:我试图发布很多链接,但系统没有让我。如果你没有它,我建议你在谷歌寻找Numpy和Pandas。 您应该检查pandas DataFrame文档以检查方法。我的情况你不明白我在谷歌寻找pandas.read_csv,pandas.dataFrame.as_matrix docs。

如果您不知道如何操作字符串,请查看Python文档中的字符串。

编辑:无论如何,如果你不想使用libs,你可以将txt文件解析为模仿矩阵的列表列表,或使用ws在他的答案中提到的csv结构。然后创建一个函数来删除列,检查每列的第一个元素(列标识符),并使用一些导出到其他矩阵。

然后创建另一个删除所需列值的函数,其他用于

重点是使用函数来完成你想要的东西,这使得解决方案对于作为矩阵管理的任何表都是通用的。

答案 2 :(得分:1)

如果您有多个像D这样的列并希望与D做同样的事情,如果您可以选择带索引而不是字母的列,则可以执行以下操作:

# your data like this
A B C D E
1 2 3 abcdef abbbb
5 6 7 abcdef abbbb
1 2 3 abcdef abbbb

import csv然后

>>> with open('yourdata.txt') as f:
...     reader = csv.reader(f, delimiter=' ')
...     for row in reader:
...         print(row[0], row[1], *[c[:2] for c in row[3:]])
... 
A B D E
1 2 ab ab
5 6 ab ab
1 2 ab ab

*之前的[c[:2] for c in row[3:]]运算符用于列表参数解包。 *基本将[1,2,3]转换为1,2,3,因此print(*[1,2,3])print(1,2,3)相同。也适用于元组。

然而,这是python3。如果你使用的是python2,print会给你语法错误,但你可以创建一个包装函数来接受解压缩列表参数,并用这个函数替换print

def myprint(*args): 
    print ' '.join([str(i) for i in args])