输入文件,修改列,输出文件

时间:2013-05-16 12:02:47

标签: python string text

我在文本文件中有数据,我希望能够按列修改文件并再次输出文件。我通常用C语言编写(基本能力),但选择python是因为它具有明显的字符串优势。我之前从未使用过python,所以我有点卡住了。我一直在阅读类似的问题,但他们只展示了如何改变整线。说实话,我已经知道该怎么做了。

说我有文件

1 2 3
4 5 6
7 8 9

我希望能够用一些函数改变第二列,然后将它乘以2得到

1 4 3
4 10 6
7 16 9

理想情况下,我可以轻松更改程序,以便将任何功能应用于任何列。

对于任何感兴趣的人,都可以修改实验室数据进行绘图。例如,取第一列的日志。

4 个答案:

答案 0 :(得分:1)

Python是一种出色的通用语言,但是我可能会建议如果你使用的是基于Unix的系统,那么也许你应该看看awk。 awk语言是为这种基于文本的转换而设计的。 awk的强大功能很容易看出你的问题,因为解决方案只有几个字符:awk '{$2=$2*2;print}'

$ cat file
1 2 3
4 5 6
7 8 9

$ awk '{$2=$2*2;print}' file
1 4 3
4 10 6
7 16 9

# Multiple the third column by 10
$ awk '{$3=$3*10;print}' file
1 2 30
4 5 60
7 8 90

awk中,每个列都由$i引用,其中i是i th 字段。所以我们只需将第二个字段的值设置为第二个字段的值乘以2并打印该行。这可以写得更简洁,如awk '{$2=$2*2}1' file,但最好在开头清楚。

答案 1 :(得分:1)

这是一个非常简单的Python解决方案:

for line in open("myfile.txt"):
    col = line.strip().split(' ')
    print col[0],int(col[1])*2,col[2]

可以做出很多改进,但我会把它作为锻炼给你。

答案 2 :(得分:1)

我会使用pandas或只是numpy。阅读您的文件:

data = pd.read_csv('file.txt', header=None, delim_whitespace=True)
然后

使用样式等电子表格中的数据,例如:

data.values[:,1] *= 2

最后再次写入文件:

data.to_csv('output.txt')

答案 3 :(得分:0)

正如@sudo_O所说,这项任务有比python更高效的工具。但是,这是一个可能的解决方案:

from itertools import imap, repeat
import csv

fun = pow

with open('m.in', 'r') as input_file :
    with open('m.out', 'wb') as out_file:

        inpt = csv.reader(input_file, delimiter=' ')
        out = csv.writer(out_file, delimiter=' ')

        for row in inpt:
            row = [ int(e) for e in row] #conversion
            opt = repeat(2, len(row) ) # square power for every value

                    # write ( function(data, argument) )
            out.writerow( [ str(elem )for elem in imap(fun, row , opt ) ]  )

此处它将每个数字相乘,但您可以将其配置为仅乘以第二列,方法是更改​​opt:opt = [ 1 + (col == 1) for col in range(len(row)) ](第1列为2,否则为1)