【问题标题】:Replace excessive spaces to format a csv替换多余的空格来格式化 csv
【发布时间】:2017-03-26 06:02:17
【问题描述】:

我在 .txt 文件中有大量数据,格式如下...

WOODY, Harlan Fred                 S2c        USN
WOOD, Earl A.                      PVT        USAR
WOOD, Frank                        S2c        USN
WOOD, Harold Baker                 BM2c       USN
WOOD, Horace Van                   S1c        USN
WOOD, Roy Eugene                   F1c        USN
WOOLF, Norman Bragg                CWTP       USN
WORKMAN, Creighton Hale            F1c        USN

我想把它变成这样的 csv 格式...

WOODY,Harlan Fred,S2c,USN

我在 Python 中看到我可以使用正则表达式和/或拆分,但我需要保留名字和姓氏之间的空格。如您所见,大多数条目之间的空间计数不同,并且偶尔也会出现选项卡(我认为)。

【问题讨论】:

  • 这些是实际服务成员的名字吗?如果是,您可能不应该发布真实姓名。
  • @PseudoAj 请注意,该页面中的解决方案将删除 Harlan Fred 中的空格。

标签: python parsing text


【解决方案1】:

这里有一种方法 - 先以逗号分隔,然后以多个空格分隔,以避免分隔单个空格的名称。然后用逗号将所有项目与str.join 连接起来:

with open(textfile) as f, open(csvfile, 'w') as fc:
    for line in f:
        first, others = line.split(',')
        row = [first] + [i.strip() for i in others.split('   ') if i]
        fc.write(','.join(row) + '\n')

【讨论】:

    【解决方案2】:

    pandas read_csv 与正则表达式分隔符一起使用。 Pandas 将比用纯 python 编写的解决方案更快。

    import pandas as pd
    pd.read_csv('./s.dat',header=None, delimiter=r"\s+") 
              0          1       2     3     4
    0    WOODY,     Harlan    Fred   S2c   USN
    1     WOOD,       Earl      A.   PVT  USAR
    2     WOOD,      Frank     S2c   USN   NaN
    3     WOOD,     Harold   Baker  BM2c   USN
    4     WOOD,     Horace     Van   S1c   USN
    5     WOOD,        Roy  Eugene   F1c   USN
    6    WOOLF,     Norman   Bragg  CWTP   USN
    7  WORKMAN,  Creighton    Hale   F1c   USN
    

    【讨论】:

      【解决方案3】:
      line = 'WOODY, Harlan Fred                 S2c        USN'
      print(line[:35].rstrip().split(', ') + line[35:].split())
      

      输出:

      ['WOODY', 'Harlan Fred', 'S2c', 'USN']
      

      【讨论】:

        【解决方案4】:

        另一种方法是用逗号替换每个双空格,然后在逗号上拆分,然后去除非空值,最后用逗号连接。将以下内容应用于文本文件中的每一行:

        ','.join([x.strip() for x in line.replace('  ',',').split(',') if x])
        

        【讨论】:

          猜你喜欢
          • 2015-03-11
          • 2018-02-18
          • 1970-01-01
          • 1970-01-01
          • 2017-06-02
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多