【问题标题】:Separate a row of strings into separate rows [closed]将一行字符串分成单独的行[关闭]
【发布时间】:2014-08-22 15:58:45
【问题描述】:
Email,Division,Department

预期输出:

Email,Division,Department

【问题讨论】:

  • 那么你卡在哪里了?您当前的代码是什么样的?
  • 如果这是 CSV,每条记录将有三个字段,而不是两个。您有一个 TSV(制表符分隔文件)。
  • 请不要用多种语言标记问题。你需要选择一个你想写的答案。否则,这个问题太宽泛了。
  • @karthikr 我现在没有任何代码可以解决这个问题...
  • @Amadan 这是一个CSV文件,不是TSV,逗号存在于字段中,例如tech,ux在一个字段中。

标签: python ruby perl shell csv


【解决方案1】:

Python 电源释放:

import csv,sys
filename = 'a.csv'
with open(filename,'rb') as csvfile:
reader = csv.reader(csvfile,delimiter=',')
try:
    for row in reader:
        if row[1].find(',') == -1:
            line = ','.join(row)
            print line
        else:
            for i in range(0,row[1].count(',')+1):
                line = row[0]+','+row[1].split(',')[i]+','+row[2].split(',')[i]
                print line
except csv.Error as e:
    sys.exit('file %s, line %d: %s' % (filename, reader.line_num, e))

【讨论】:

    【解决方案2】:

    我认为您的文件不是真正的 csv 文件。 但是你可以试试这个代码,我认为它有效。

    def convert(strs):
    array=[]
    if len(strs)==4:
        array.append({
            'left':strs[0],
            'right':strs[2]
        })
        array.append({
            'left':strs[1],
            'right':strs[3]
        })
    else:
          array.append({
            'left':strs[0],
            'right':strs[1]
        })
    return array
    
    file='/Users/lidl/example.csv'
    sumarray=[]
    for line in open(file):
        line=",".join(line.split())# rebuild a str line with comma segmentation
        strs=line.split(",")
        sumarray=sumarray+convert(strs)
    
    for item in sumarray:
        print(item['left']+" "+item['right'])
    

    抱歉,代码格式错误。

    【讨论】:

      【解决方案3】:

      这是一个快速的 Ruby 版本:

      #!/usr/bin/ruby
      
      # header
      puts STDIN.gets
      
      while line = STDIN.gets
              left, right = line.split
      
              left  = left.split(',')
              right = right.split(',')
      
              left.each_with_index{ |item, i|
                      break unless right[i]
                      puts item + "\t" + right[i]
              }
      end
      

      测试:

      $ cat /tmp/test | /tmp/test.rb
      Division    Department
      tech    qa
      ux      ui
      tech    server
      prod    prod
      sales   sales
      

      【讨论】:

      • test.rb:10: 为 nil:NilClass (NoMethodError) 调用私有方法`split'
      • err,当我写代码时,你改变了输入。该脚本是为您的旧输入编写的。
      猜你喜欢
      • 2010-12-06
      • 1970-01-01
      • 2014-08-22
      • 1970-01-01
      • 1970-01-01
      • 2022-01-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多