我的 python 脚本在执行时将值打印到打开它的 excel 文档的单个列

My python script when executed prints values to a single column of the excel document in which it is opened

我一直在尝试在执行简单检查后将行从 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| PREDICTED: hypothetical protein [Vitisvinifera],No hit,""tr|B9ST04|B9ST04_RICCO DNA binding protein,>putative OS=Ricinus communisGN=RCOM_0353100 PE=4 SV=1"",""PF01426,PF05641"",None,None,None,None,AT1G68580.1,None,agenet domain-containing protein / bromo-adjacent homology (BAH) domain-containing protein,PF01426|PF05641 BAH domain|Agenet domain

这将是示例输入

#!/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()   

你的代码看起来不错。 为什么说它只在一栏中打开呢? 这可能是 excel 中的默认分隔符(我猜默认情况下是 space/tab)。

打开 excel 中的 csv 并转到数据->文本到列,select 'comma' 作为分隔符,然后按完成。

代码好像没问题。

你可以试试改成:

 csv_out = csv.writer(file_out,dialect='excel',delimiter='\t')

或其他分隔符,例如';'

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(",") 之后的列表会 return 这样的列表,使用拆分将解决问题,例如在下面的代码中

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