使用Python中的不同分隔符读取数据

时间:2015-04-01 23:54:14

标签: python

我正在尝试使用Python 2.7从文件中读取以下数据: 3

0.32,0.32,0.12,0.04,0.07,0.13
3,7
32,62 42,68 12,98
95,13 97,25 93,37 79,27 75,19 49,47 67,17

值大部分以逗号分隔,但在倒数第二行中,数据点集以空格分隔。关于如何从csv文件中读取此数据的任何想法?

4 个答案:

答案 0 :(得分:4)

As per the comment,只需根据逗号分隔每一行或通过re.split函数分隔空格。

import re
with open('file') as f:
    for line in f:
        print(re.split(r'[,\s]', line.strip()))

[,\s]字符类,它匹配逗号或\s空格字符。

<强>输出:

['0.32', '0.32', '0.12', '0.04', '0.07', '0.13']
['3', '7']
['32', '62', '42', '68', '12', '98']
['95', '13', '97', '25', '93', '37', '79', '27', '75', '19', '49', '47', '67', '17']

答案 1 :(得分:1)

使用空格或逗号分隔正则表达式。

with open('data.csv') as data:
    lines = [re.split(r'\s+|,', i.strip()) for i in data]

答案 2 :(得分:0)

另一种方法是,如果字段之间只有一个空格,则用逗号替换每个空格,或者用空格替换每个空格,然后根据需要使用split()。如果限制不成立,您将需要一个正确处理它的正则表达式。

&#34; 每当您选择正则表达式作为问题的解决方案时,您就会遇到两个问题。&#34;

答案 3 :(得分:0)

您并没有准确地说出您想要读取数据点集的格式,但如果数据点一起表示&#34;值&#34;,您可以执行以下操作:

with open('sample_data.csv') as csvfile:
    for line in (line.strip() for line in csvfile):
        row = line.split(sep=None if ' ' in line else ',')
        print(row)

str.split()方法接受一个可选的关键字参数,告诉它要拆分的分隔符字符串,但如果没有给出或给出并设置为None,它会认为是连续的空格分隔符。上面的代码检查每行是否包含空格字符,并将相应的关键字参数值传递给split(),具体取决于该行中的数据类型。

输出:

['0.32', '0.32', '0.12', '0.04', '0.07', '0.13']
['3', '7']
['32,62', '42,68', '12,98']
['95,13', '97,25', '93,37', '79,27', '75,19', '49,47', '67,17']