我有一个包含15列的表格文件,我想在循环中为该文件的每一行执行2个awk命令(我正在python脚本中生成许多其他函数,因此这些awk命令应该在我的脚本中)
#!/usr/bin/python3
import subprocess
import csv
strand_signature = "awk '{if($10 > $11) {$16='-'}; else {$16='+'}}' row"
strand_correction = "awk '{n1=$10;n2=$11;if($10 > $11) {$10=n2; $11=n1}' row"
with open('my_file.csv') as csv_file:
csv_reader = csv.reader(csv_file, delimiter='\t')
for row in csv_reader:
subprocess.call(strand_signature, shell=True)
subprocess.call(strand_correction, shell=True)
print(row)
简而言之:我要执行的每个命令都存储在两个变量中:strand\u signature和strand\u correction。所以我逐行读取csv文件并调用这两个脚本,但是在打印测试中,修改不会发生。你知道吗
有人能解释一下我犯了什么错误吗?你知道吗
编写脚本最简单的方法是编写单独的行,甚至只是行的一部分,运行、测试,确保它正常工作,然后继续下一部分。这样,你一次只需要解决几个问题。你知道吗
相反,您选择了最困难的方法:编写整个脚本,然后尝试解决所有问题。这意味着您必须同时考虑以下所有问题,因为每一个问题都是一个完整的问题:
}
row
作为awk
的文件名,即使这是Python列表而不是文件awk
读取或写入任何Python数据awk
也是基于行的,而不是基于Python列表的,因此您必须相应地进行连接和拆分最好的选择是扔掉所有的
awk
,改用Python。这样写和运行起来更简单、更健壮,而且速度更快:相关问题 更多 >
编程相关推荐