我在文本文件中有数据,我希望能够按列修改文件并再次输出文件。我通常用C语言编写(基本能力),但选择python是因为它具有明显的字符串优势。我之前从未使用过python,所以我有点卡住了。我一直在阅读类似的问题,但他们只展示了如何改变整线。说实话,我已经知道该怎么做了。
说我有文件
1 2 3
4 5 6
7 8 9
我希望能够用一些函数改变第二列,然后将它乘以2得到
1 4 3
4 10 6
7 16 9
理想情况下,我可以轻松更改程序,以便将任何功能应用于任何列。
对于任何感兴趣的人,都可以修改实验室数据进行绘图。例如,取第一列的日志。
答案 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)