我是否可以获得有关如何将输出写入制表符分隔格式的建议?我正在将csv文件与字典进行比较。这是我的代码(这是我遇到问题的代码的结尾):
import csv
file3 = open(r'file.csv','rt', newline = '')
baits = csv.reader(file3, delimiter = '\t')
file4 = open(r'file.txt','wt', newline = '')
common = csv.writer(file4, delimiter = '\t')
for line in baits:
chromosome = line[0]
start = int(line[1])
end = int(line[2])
if chromosome in dmc:
for value in dmc[chromosome]:
base = value[0]
others = value[1:]
if base >= start and base <= end:
count_in += 1
common.writerow(line + [base, others])
file3.close()
file4.close()
以下是我的输出示例:
chr1 3505353 3505472 3505390 (['3505390', '-', '3.32682966730502e-08', '1.69470366570212e-07', '-35.4239256678281', '1', '156190', 'NM_001011874', '-'],)
chr1 3601312 3601671 3601347 (['3601347', '-', '1.94815734655407e-08', '1.01925267518696e-07', '-40.8010680907877', '2', '60233', 'NM_001011874', '-'],)
我在试图摆脱牙箍时遇到了问题。&#39;&#39;这样大括号中的每个值都是制表符分隔的。
有人知道可以修改代码来实现吗?
谢谢!
答案 0 :(得分:0)
我猜测 - 因为你的问题缺少很多信息 - 你需要改变这一行:
common.writerow(line + [base, others])
到此:
common.writerow(line + list(value))
此外,csv
文件应以'rb'
或'wb'
模式打开。
答案 1 :(得分:0)
如果没有在这里看到您的数据,很难说,但我猜它看起来像这样:
line = ['chr', 3505353, 3505472]
base = 3505390
others = (['3505390', '-', '3.32682966730502e-08', '1.69470366570212e-07', '-35.4239256678281', '1', '156190', 'NM_001011874', '-'],)
如果是,line + [base, others]
将是:
['chr', 3505353, 3505472, 3505390, (['3505390', '-', '3.32682966730502e-08', '1.69470366570212e-07', '-35.4239256678281', '1', '156190', 'NM_001011874', '-'],)]
换句话说,五列,最后一列是包含一个包含一堆值的列表的元组。
我不确切知道你想要什么输出,但我假设该元组中的每个列表意味着一个新行,而列表只是一堆额外的列。在这种情况下:
if base >= start and base <= end:
count_in += 1
for other in others:
common.writerow(line + [base] + others)
这会给你一行看起来像:
chr1 3505353 3505472 3505390 3505390 - 3.32682966730502e-08 1.69470366570212e-07 -35.4239256678281 1 156190 NM_001011874 -
无论如何,获得所需输出的唯一方法是获取列值列表。调试正确的列表要容易得多。尝试打印出各个部分,然后找出你必须做的事情,将这些部分放在一个单独的平面列表中。一旦你拥有了,你就完成了。