将逗号分隔的数据转换为不带CSV模块的列表

时间:2015-02-02 06:21:21

标签: python list csv split comma

我正在上一个数据库类,在python上有点生疏。我的任务如下 -

转换此文字:

"col 1", "col 2", "col 3"
1, 'abc', 2
3, "de,fg", 4
5, , 6

进入这个:

[ "col 1", "col 2", "col 3" ]
[ 1, 'abc', 2 ]
[ 3, "de,fg", 4]
[ 5, None, 6]

到目前为止,我所有的一切都是这样(很难过):

data = open('DatabaseTest.txt', 'r', encoding='utf8').read()
dataS = data.split('\n')

我暂时需要的python程序就是打印上面的内容。问题是我们不允许使用CSV模块,s.split(',')不起作用,因为一个字符串包含逗号。

非常感谢任何帮助。我正在拔头发,因为我找不到任何不包含CSV模块的提示。

谢谢!

3 个答案:

答案 0 :(得分:2)

def smart_split(s,token=","):
    in_quotes = False
    current_idx = 0
    for i,c in enumerate(s):
        if c in "\"'":
           in_quotes = not in_quotes
        elif c == token and not in_quotes:
           yield s[current_idx:i].strip()
           current_idx = i+1
    yield s[current_idx:].strip()

print list(smart_split('3, "de,fg", 4'))
print map(smart_split,open("some_File.txt"))

可能会帮助你开始......可能有更好的方法,但我认为这基本上适合你......

答案 1 :(得分:0)

这适用于您的特定输入。

data = open('/file', 'r').read()
dataS = [i for i in data.split('\n') if i]
for i in dataS:
    print(i.split(', '))

输出:

['"col 1"', '"col 2"', '"col 3"']
['1', "'abc'", '2']
['3', '"de,fg"', '4']
['5', '', '6']

通过正则表达式。

import re
data = open('/home/avinash/Desktop/ri', 'r').read()
dataS = [i for i in data.split('\n') if i]
for i in dataS:
    print(re.split(r'\s*,\s*(?=(?:"[^"]*"|\'[^\']*\'|[^\'"])*$)', i))

输出:

['"col 1"', '"col 2"', '"col 3"']
['1', "'abc'", '2']
['3', '"de,fg"', '4']
['5', '', '6']

答案 2 :(得分:0)

如果你想通过在这里使用简单的运算符和条件来解决这个问题的最基本方法,那就是:

data = open("DatabaseTest.txt", 'r').read()
csv = ""
i = 0
l = len(data)

for char in data:
    i += 1
    if csv == "":
        csv += "["
    if char == "\n":
        csv += "]"
        csv += char
        csv += "["
    else:
        csv +=  char
    if char == ",":
        if data[i+1] == "," or data[i] == ",":
            csv += " None"
    if i == l:
        csv += "]"

print csv

请注意,这不是您问题的最佳实现,但这肯定会对您的任务产生影响。

和POOOF!

它只会使字符串输出不是列表..