我有一个包含混合信息的文件,而我只需要它们的某些列。
以下是我的示例文件。
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文件,但每列之间有空格。
答案 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])