繁体   English   中英

为什么在 Python 2.7 中写入的 output 文件的最后一行添加了 ^M?

[英]Why is ^M added to the last line of an output file written in Python 2.7?

这是我的文件,a.tsv

ENST00000330436 chr4    -       96099729        96125021
ENST00000332884 chr4    -       96518062        96549623
ENST00000651514 chr5    -       145620969       145647819
ENST00000550308 chr17   +       32532671        32551233
ENST00000371270 chr4    -       96294895        96343068^M

我使用了这个 Python 2.7 脚本

with open(a.tsv, 'wb') as f_output:
    tsv_output = csv.writer(f_output, delimiter='\n')
    tsv_output.writerow(output_unique)

生成上述 a.tsv 文件。 我看到文件最后一行的末尾有^M

我在哪里对上述代码进行更改以删除它?

该列表的一个示例是:

output_unique=[string1, string2, string3]

您的 TSV 文件使用 DOS 行尾 (CRLF),而awk需要 POSIX 行尾。 问题是您正在使用对writerow的一次调用来编写多行; 就您的 Python 代码而言,它生成了一个使用\n来分隔字段的单行。 单行以\r\n结尾,但awk将其视为 TSV 文件,其最后一行的最后一个字段以\r结尾。

Python 代码应该类似于

output_unique = [
    ['ENST00000330436', 'chr4', '-', '96099729', '96125021'],
    ['ENST00000332884', 'chr4', '-', '96518062', '96549623'],
    ['ENST00000651514', 'chr5', '-', '145620969', '145647819'],
    ['ENST00000371270', 'chr4', '-', '96294895', '96343068'],
]

with open("a.tsv", 'w') as f_output:
    tsv_output = csv.write(f_output, delimiter='\t')
    tsv_output.writerows(output_unique)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM