我正在尝试使用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文件中读取此数据的任何想法?
答案 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']