替换多余的空格以格式化csv

时间:2016-11-11 23:08:02

标签: python parsing text

我在.txt文件中有一个TON数据格式如此...

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中看到我可以使用正则表达式和/或拆分,但我需要保留名字和姓氏之间的空格。如您所见,大多数条目的空间数量不同,偶尔的标签也可能出现(我认为)。

4 个答案:

答案 0 :(得分:2)

这是一种方法 - 首先拆分逗号然后在多个空格上拆分以避免拆分单个间隔的名称。然后使用逗号- name: Add hosts to /etc/hosts lineinfile: dest=/etc/hosts line='{{ item.dest }} {{ item.src }}' regexp='.*{{ item.src }}.*' state=present with_items: - "{{ hosts[service_name] }}" when: (service_name in hosts) 加入所有项目:

'dict object' has no attribute u'blah'

答案 1 :(得分:1)

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

答案 2 :(得分:0)

line = 'WOODY, Harlan Fred                 S2c        USN'
print(line[:35].rstrip().split(', ') + line[35:].split())

输出:

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

答案 3 :(得分:0)

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

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