2017-09-15 40 views
3

删除单引号我有一个输入字符串:从列表在Python

result = '"testing","0.8841","642000.0","80.014521","-60.940653","4522126666","1500854400","","1500842014000","name","80.014521","-60.996532","sampledevice","3","name"' 

data = result.split("\n") 

i = 0 
while i < len(data): 
    i = i +1 
    dd = data[i].split(',') 
    print dd 
    break 

和相应的输出为:

[ 
    '"testing"', 
    '"0.8841"', 
    '"642000.0"', 
    '"80.014521"', 
    '"-60.940653"', 
    '"4522126666"', 
    '"1500854400"', 
    '""', 
    '"1500842014000"', 
    '"name"', 
    '"80.014521"', 
    '"-60.996532"', 
    '"sampledevice"', 
    '"3"', 
    '"name"' 
] 

我怎样才能在列表中的每个元素去掉单引号?

+0

注:'而我 AChampion

+0

谢谢@AChampion –

回答

5

很好地解决对待文本一个CSV:

import csv 
import StringIO 

result = '"testing","0.8841","642000.0","80.014521","-60.940653","4522126666","1500854400","","1500842014000","name","80.014521","-60.996532","sampledevice","3","name"' 
print next(csv.reader(StringIO.StringIO(result))) 

给你:

['testing', '0.8841', '642000.0', '80.014521', '-60.940653', '4522126666', '1500854400', '', '1500842014000', 'name', '80.014521', '-60.996532', 'sampledevice', '3', 'name'] 
+0

这有什么好处是,它允许在字符串中的逗号以及将它们分开。 – Stael

5

您需要应用strip删除字符串两边的引号。

dd = [x.strip('"') for x in data[i].split(',')] 

说,你的循环似乎有索引问题。应该被重写,比如像这样:

result = '"testing","0.8841","642000.0","80.014521","-60.940653","4522126666","1500854400"\n"1500842014000","name","80.014521","-60.996532","sampledevice","3","name"' 

for line in result.splitlines(): 
    dd = [x.strip('"') for x in line.split(',')] 
    print(dd) 

在这一点上,你会甚至

dd = ast.literal_eval(line) 

csv模块还完美的使用最好用list作为输入(无需通过一个文件句柄)(不通过一个string,不过,因为它产生了一些奇怪的效果)

导入CSV

for row in csv.reader(result.splitlines()): 
    print(row) 

所有导致:

['testing', '0.8841', '642000.0', '80.014521', '-60.940653', '4522126666', '1500854400'] 
['1500842014000', 'name', '80.014521', '-60.996532', 'sampledevice', '3', 'name'] 
4

更换双引号前分裂

>>> result.replace('"', '').split(',') 
['testing', '0.8841', '642000.0', '80.014521', '-60.940653', '4522126666', '1500854400', '', '1500842014000', 'name', '80.014521', '-60.996532', 'sampledevice', '3', 'name'] 
+0

Downvoter喜欢发表评论吗? –

+0

NMDV但如果字符串中有引号就有问题。当然,在OP尝试中,如果字符串中有逗号,它也不起作用。 –

+0

@ Jean-FrançoisFabre诚然,但那些双引号不是单引号。如果不存在,则日常语法中的双引号内的双引号很少见。 –

4

literal_eval针对此问题

import ast 
dd = [ast.literal_eval(i) for i in data] 
1

第一:你不必在输出字符串单引号。你有什么是用双引号引用的字符串(可能用于存储在csv文件中)。单引号您在输出中看到的实际上是确定字符串。所以:

'"some_string"' 

实际上是

"some_string" 

二:如果你想删除双引号,你可以这样做:

for item in data.split(","): 
    print(item.strip('"')) 

请看下面的语句,它应该是比较清楚:

item = '"some_string"' 
other_item = 'some_string' 
some_other_item = "some_string" 

print(item) # --> "some_string" 
print(other_item) # --> some_string 
print(some_other_item) # --> some_string 

print(item, other_item, some_other_item) # --> ('"some_string"', 'some_string', 'some_string') 
+0

是@Fejs结果与csv文件完全一致。感谢您的建议。它非常有帮助 –

1

虽然政治家t很奇怪。他不想删除单引号吗?为什么每个人都会发布删除双引号的答案。

这里是我的建议:

result = '"testing","0.8841","642000.0","80.014521","-60.940653","4522126666","1500854400","","1500842014000","name","80.014521","-60.996532","sampledevice","3","name"' 

data = result.split("\n") 

s = str(data)[2:-2] #Convert to a string, and delete [' and '] 
for dd in s.split(','): 
    print dd 

结果:

"testing" 
"0.8841" 
"642000.0" 
"80.014521" 
"-60.940653" 
"4522126666" 
"1500854400" 
"" 
"1500842014000" 
"name" 
"80.014521" 
"-60.996532" 
"sampledevice" 
"3" 
"name" 
+0

你读过这个问题吗? –

+0

@ Jean-FrançoisFabre实际上Alperen有一点 - 由于OP描述问题的方式... – coder

+0

@coder如果你这样说。尝试理解太累了。我刚刚编辑“无法评论”,因为这是一个实际的答案。 –