【问题标题】:Write lists as columns in tsv file将列表写为 tsv 文件中的列
【发布时间】:2018-12-13 04:28:54
【问题描述】:

我希望将三个列表存储在 tsv 文件中,如下所示:

 1 a yes
 2 b no 
 3 c yes

名单:

list1 = [u'1', u'2', u'3']
list2 = [u'a', u'b', u'c']
list3 = [u'yes', u'no', u'yes']

以下代码使用 csv writer 方法对其进行存储:

rowlists = zip(list1, list2, list3)
writer = csv.writer(outfile, delimiter='\t')
for row in rowlists:
     writer.writerow(row)

但是,由于我猜 tsv 和 csv SyntaxError: Got u'"\t1.0' 之间的格式差异,这种方法会在以后的处理中导致一些错误。那么,是否有另一种方法可以在不使用 csv 编写器的情况下做到这一点? 我正在使用 python 2.7。

任何帮助将不胜感激。 谢谢,

【问题讨论】:

  • 您应该使用相同的 delimiter='\t' 参数为您读取 tsv 文件 csv.reader
  • @blhsing 感谢您的评论。论据是一样的。整个想法是我试图从一个 tsv 中读取两列,从 tsv 文件中读取一列,并将它们全部加入一个新的 tsv 文件中。见stackoverflow.com/questions/51176851/…

标签: python python-2.7 list csv


【解决方案1】:

如果您不想使用编写器,可以手动执行此操作。但请注意,管理包含分隔符的列的引号会有点困难:

最简单的方法:

numItems = len(l1)
outputStr = ''

for i in range(0,numItems): 
  outputStr += l1[i] + "\t" + l2[i] + "\t" + l3[i] + "\n"


with open('output.tsv', "w") as outputter:
  outputter.write(outputStr)

如果 col 数据还包含 '\t',则您必须搜索每个列表项并将其括在引号中...如有必要,可以更新。

如果有unicode字符,可以在打开文件的写操作中定义。

希望有帮助

【讨论】:

  • 谢谢。问题依然存在。请看stackoverflow.com/questions/51176851/…
  • 感谢您的链接和您的评论。我很难理解为什么会出现问题或问题所在的位置。这个过程似乎有点直截了当......从两个文件中读取,将它们分解为数组数组。构造一个新的数组数组。并删除。也许您可以提取代码的相关子集以及“旧”和“新”数据文件并共享 github 链接?这样,我们可以查看代码并在正确的上下文中查看错误。
【解决方案2】:

csv.writer 需要传递一个打开的文件对象

with open(outfile, 'w+') as f:
    writer = csv.writer(f, delimiter='\t')
    for row in rowlists:
        writer.writerow(row)

【讨论】:

猜你喜欢
  • 2018-08-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多