[英]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.