我有这样的文本文件
{ a 3 56 cd 8 }
{ 1 2 3 4 ab 546 }
for line in filename.readlines():
line = line.lstrip('{').rstrip('}\n').strip(' ').split(' ')
这是最好的方法吗? 因为我听过有人说分割函数应该很少使用,因为它会大大减慢脚本速度。
修改: 我希望输出为:
[[a,3,56,'cd',8],[1,2,3,4,'ab',546]]
答案 0 :(得分:1)
假设在开始前和结束括号之后没有空格:
li = [line[1:-1].split() for line in file]
或者如果我不能认为:
li = [line.strip()[1:-1].split() for line in file]
答案 1 :(得分:0)
最好使用csv
模块之类的模块来解析文件。这是一个示例代码。
# Your file contents - test.csv
{ 1 2 3 asd 4 5 6 }
{ 5 6 7 8 def 8 9 }
>>> import csv
>>> reader = csv.reader(open('test.csv', 'rb'), delimiter=' ')
>>> all_lines = []
>>> for line in reader:
>>> # if the braces are always in the first and last positions
>>> # you can just do this
>>> all_lines.append(line[1:-1])
>>>
>>> all_lines
[['1', '2', '3', 'asd', '4', '5', '6'], ['5', '6', '7', '8', 'def', '8', '9']]
请注意,列表将包含数字作为字符串。如果需要,可以在追加之前将它们转换为数字格式。
答案 2 :(得分:0)
使用列表理解:
[ [ c for c in l.split() if c not in ('{', '}') ] for l in filename.readlines() ]
如果你想避免split
你可以使用正则表达式,不知道它会如何表现更好:
import re
[ re.findall("\w+", l) for l in filename.readlines() ]
答案 3 :(得分:0)
我会使用一个剥离程序:
L = []
for line in file:
values = line.strip('{}\n\r ').split(' ')
L.append(values)
它假设您的值没有“{}”。它也适用于Windows(因为Windows上的换行符\ n除了\ n之外)。
如果使用了多个split
函数,则每一步都会在内存中创建大量临时对象(因为string
是不可变的)。
我怀疑,除了使用split
之外还有更快的解决方案。
此外,不需要使用filename.readlines()
的文件来混淆内存。使用for line in file
可以完美地逐行阅读,也可以将file_object
命名为'file_name'
,因为它们并不完全相同。
slicing
(string[1:-1]
)有一些解决方案。需要进行一些测试以确定此方法是否比仅使用strip
更快。