在执行简单的检查后,我一直在尝试将行从csv(逗号分隔)复制到另一个csv文件。但是,新创建的输出恰好位于单个列中。我该如何解决这个问题?我已经尝试使用 excel 中的文本解决方案迁移值,但没有积极的结果。我在块引号中提供的是一个示例 csv 输入,它将位于 ~400mb 文件中,如果满足条件,则需要在将给定条件复制到第二个文件之前读取给定条件。
"Glyma0022s00420.1,1932,1932,1,5.397348971,9.108346736,13.06778834,13.60298787,0.77651741,0.117442453,11.76078538,8.366009655,10.94107876,12.25047115,0.985502816,0.938466273,11.36138317,9.161105262,15.77093455,14.41819843,0.727405702,0.019170303,12.43972822,16.69100507,0.714607056,0.403279462,"OSI,rcom,",gi|225423945|ref|XP_002279093.1|预测:假设的蛋白质[Vitisvinifera],没有命中,"tr|B9ST04|B9ST04_RICCO DNA结合蛋白,>假定的OS=Ricinus communisGN=RCOM_0353100 PE=4 SV=1","PF01426,PF05641",无,无,AT1G68580.1,无,agenet含结构域蛋白/溴邻源(BAH)含结构域蛋白,PF01426|PF05641 BAH域名|老年网域名
这将是示例输入
#!/usr/bin/env
import csv
from sys import argv
script, filename = argv
def pvalueselection(file_in, file_out):
header = True
for line in file_in:
line_split = line.split(',')
if(header):
file_out.writerow([line])
header = False
continue
else:
if float(line_split[9]) <=0.05 or float(line_split[15])<=0.05 or float(line_split[21]) <=0.05 or float(line_split[25])<=0.05:
file_out.writerow([line])
def main():
file_in = open(filename, 'rb')
file_out = open ("output.csv",'wb')
csv_out = csv.writer(file_out,dialect='excel',delimiter=',')
pvalueselection(file_in,csv_out)
file_in.close()
file_out.close()
if __name__ == '__main__': main()
file_out.writerow([line])
将创建一个只有一个元素的列表例如
In [1]: test = "1,2,3,4,5,6,7"
In [2]: list_test = [test]
Out[2]: ['1,2,3,4,5,6,7']
In [6]: len(list_test)
Out[6]: 1
您需要的是分隔符分隔元素的列表。在代码中line.split(",")
后使用列表会返回这样的列表,使用拆分将解决问题,例如在下面的代码中
In [1]: test = "1,2,3,4,5,6,7"
In [2]: list_test = test.split(",")
In [3]: print list_test
out: ['1', '2', '3', '4', '5', '6', '7']
#now use the writerow method to write the list
file_out.writerow(list_test)
参考文档包含有关用法的更多示例https://docs.python.org/3/library/csv.html
你的代码看起来不错。为什么说它只在一列中打开?这可能是您在 excel 中的默认分隔符(我想默认情况下是一个空格/制表符)。
在 excel 中打开 csv 并转到数据>文本到列,选择"逗号"作为分隔符,然后按完成。
代码似乎很好。
您可以尝试更改为:
csv_out = csv.writer(file_out,dialect='excel',delimiter='t')
或其他分隔符,例如";"