【问题标题】:Building a tab separated row构建一个制表符分隔的行
【发布时间】:2019-07-24 21:31:58
【问题描述】:

我使用的 tsv 文件有 100 列,其中我只需要 10 列。

我的任务是打开文件,一次读取一行并构建另一个只有 10 列的 tsv 行。我知道我需要的列的索引。

with open(self.file_name, 'r') as input_file:
    reader = csv.reader(input_file, delimiter='\t')
    for row in reader:
         trim_row.append(str(row[0]) + "\t" +  str(row[1]) + "\t" + 
         str(row[2]) + "\t" + str(row[4]) + "\t" + str(row[11]))

这就是我看到的

输入行:

['2019-01-13', '123'    , 'test',   '123',  '123',  'test', '123',  '123',  '3',    'abc',  'abc',  'def',  '23',   '45',   '40',   '7',    '8',    'a' , '56']

我得到的是 修剪行:

['2019-01-13\t123\ttest\t123\t123']

我需要的是这样的列子集:

['2019-01-13', '123'    , 'test',   '123']

【问题讨论】:

  • 您的示例输出以逗号分隔,而不是制表符分隔。你需要哪个?确认后,我将在下面更新我的答案
  • 它的标签是分开的。我想知道是否有办法做到这一点而不必写入输出文件。
  • 好吧,你上面的“trim_row”是一个制表符分隔的列表,应该给你你想要的吗?尝试print(trim_row),您应该会看到由制表符分隔的值。

标签: python python-2.7 csv


【解决方案1】:

我建议您使用csv.writer 来更轻松地利用标准库。下面的示例代码希望将 self.out_file_name 添加到您的方法中:

with open(self.file_name, 'r') as input_file and open(self.out_file_name, 'w') as output_file:
    reader = csv.reader(input_file, delimiter='\t')
    writer = csv.writer(output_file)
    for row in reader:
        writer.writerow([row[0], row[1], row[2], row[4], row[11]]) 

【讨论】:

    【解决方案2】:

    您将一个字符串中的所有列附加到input_row,而不是一个数组。要么一一追加,要么将它们放在列表中并扩展。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-04
      • 2010-09-22
      • 2021-02-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多