首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >将逗号分隔的数据转换为不带CSV模块的列表

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

Stack Overflow用户
提问于 2015-02-02 14:21:21
回答 3查看 168关注 0票数 2

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

转换此文本:

代码语言:javascript
运行
复制
"col 1", "col 2", "col 3"
1, 'abc', 2
3, "de,fg", 4
5, , 6

如下所示:

代码语言:javascript
运行
复制
[ "col 1", "col 2", "col 3" ]
[ 1, 'abc', 2 ]
[ 3, "de,fg", 4]
[ 5, None, 6]

到目前为止,我所拥有的只有以下内容(这是可悲的):

代码语言:javascript
运行
复制
data = open('DatabaseTest.txt', 'r', encoding='utf8').read()
dataS = data.split('\n')

目前我需要python程序做的就是打印上面的内容。问题是我们不允许使用CSV模块,并且s.split(',')无法工作,因为有一个字符串包含逗号。

任何帮助都是非常感谢的。我拔出我的头发,因为我找不到任何不包括CSV模块的提示。

谢谢!

EN

回答 3

Stack Overflow用户

发布于 2015-02-02 14:34:50

代码语言:javascript
运行
复制
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"))

也许能帮你入门。可能还有更好的方法,但我认为这对你来说基本上是可行的。

票数 2
EN

Stack Overflow用户

发布于 2015-02-02 15:16:25

这适用于您的特定输入。

代码语言:javascript
运行
复制
data = open('/file', 'r').read()
dataS = [i for i in data.split('\n') if i]
for i in dataS:
    print(i.split(', '))

输出:

代码语言:javascript
运行
复制
['"col 1"', '"col 2"', '"col 3"']
['1', "'abc'", '2']
['3', '"de,fg"', '4']
['5', '', '6']

通过正则表达式。

代码语言:javascript
运行
复制
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))

输出:

代码语言:javascript
运行
复制
['"col 1"', '"col 2"', '"col 3"']
['1', "'abc'", '2']
['3', '"de,fg"', '4']
['5', '', '6']
票数 0
EN

Stack Overflow用户

发布于 2015-02-02 15:17:35

如果您只想通过使用简单的运算符和条件来解决此问题,请执行以下操作:

代码语言:javascript
运行
复制
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!

它只会输出一个字符串,而不是一个列表。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28272138

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档