Python 读取 .txt 文件 -> 列表
Python read .txt File -> list
我有一个 .txt 文件,我想获取列表中的值。
txt文件的格式应该是:
value0,timestamp0
value1,timestamp1
...
...
...
最后我想得到一个列表
[[value0,timestamp0],[value1,timestamp1],.....]
我知道通过
很容易得到这些值
direction = []
for line in open(filename):
direction,t = line.strip().split(',')
direction = float(direction)
t = long(t)
direction.append([direction,t])
return direction
但我有一个大问题:创建数据时我忘记在每一行中插入一个“\n”。
这就是我采用这种格式的原因:
value0, timestamp0value1,timestamp1value2,timestamp2value3.....
每个时间戳恰好有 13 个字符。
有没有办法把这些数据按照我的意愿放到一个列表中?再次获取数据将是一项非常艰巨的工作。
谢谢
最大值
我用你的例子编写了一个快速代码,而不是使用 13 而是 len("timestamp") 所以你可以适应
instr = "value,timestampvalue2,timestampvalue3,timestampvalue4,timestamp"
previous_i = 0
for i,c in enumerate(instr):
if c==",":
next_i = i+len("timestamp")+1
print(instr[previous_i:next_i])
previous_i = next_i
输出被解扰:
value,timestamp
value2,timestamp
value3,timestamp
value4,timestamp
您必须删除最后一个 , 但您可以在逗号后每 13 个字符后插入一个逗号:
import re
s = "-0.1351197,1466615025472-0.25672746,1466615025501-0.3661744,1466615025531-0.46467665,1466615025561-0.5533287,1466615025591-0.63311553,1466615025621-0.7049236,1466615025652-0.7695509,1466615025681-1.7158673,1466615025711-1.6896278,1466615025741-1.65375,1466615025772-1.6092329,1466615025801"
print(re.sub("(?<=,)(.{13})",r""+",", s))
哪个会给你:
-0.1351197,1466615025472,-0.25672746,1466615025501,-0.3661744,1466615025531,-0.46467665,1466615025561,-0.5533287,1466615025591,-0.63311553,1466615025621,-0.7049236,1466615025652-0.7695509,1466615025681,-1.7158673,1466615025711,-1.6896278,1466615025741-1.65375,1466615025772,-1.6092329,1466615025801,
import re
input = "value0,0123456789012value1,0123456789012value2,0123456789012value3"
for (line, value, timestamp) in re.findall("(([^,]+),(.{13}))", input):
print value, timestamp
我想你可以这样做:
direction = []
for line in open(filename):
list = line.split(',')
v = list[0]
for s in list[1:]:
t = s[:13]
direction.append([float(v), long(t)])
v = s[13:]
如果您正在使用 python 3.X,则 long 函数不再存在 -- 使用 int。
我有一个 .txt 文件,我想获取列表中的值。 txt文件的格式应该是:
value0,timestamp0
value1,timestamp1
...
...
...
最后我想得到一个列表
[[value0,timestamp0],[value1,timestamp1],.....]
我知道通过
很容易得到这些值direction = []
for line in open(filename):
direction,t = line.strip().split(',')
direction = float(direction)
t = long(t)
direction.append([direction,t])
return direction
但我有一个大问题:创建数据时我忘记在每一行中插入一个“\n”。
这就是我采用这种格式的原因:
value0, timestamp0value1,timestamp1value2,timestamp2value3.....
每个时间戳恰好有 13 个字符。
有没有办法把这些数据按照我的意愿放到一个列表中?再次获取数据将是一项非常艰巨的工作。
谢谢 最大值
我用你的例子编写了一个快速代码,而不是使用 13 而是 len("timestamp") 所以你可以适应
instr = "value,timestampvalue2,timestampvalue3,timestampvalue4,timestamp"
previous_i = 0
for i,c in enumerate(instr):
if c==",":
next_i = i+len("timestamp")+1
print(instr[previous_i:next_i])
previous_i = next_i
输出被解扰:
value,timestamp
value2,timestamp
value3,timestamp
value4,timestamp
您必须删除最后一个 , 但您可以在逗号后每 13 个字符后插入一个逗号:
import re
s = "-0.1351197,1466615025472-0.25672746,1466615025501-0.3661744,1466615025531-0.46467665,1466615025561-0.5533287,1466615025591-0.63311553,1466615025621-0.7049236,1466615025652-0.7695509,1466615025681-1.7158673,1466615025711-1.6896278,1466615025741-1.65375,1466615025772-1.6092329,1466615025801"
print(re.sub("(?<=,)(.{13})",r""+",", s))
哪个会给你:
-0.1351197,1466615025472,-0.25672746,1466615025501,-0.3661744,1466615025531,-0.46467665,1466615025561,-0.5533287,1466615025591,-0.63311553,1466615025621,-0.7049236,1466615025652-0.7695509,1466615025681,-1.7158673,1466615025711,-1.6896278,1466615025741-1.65375,1466615025772,-1.6092329,1466615025801,
import re
input = "value0,0123456789012value1,0123456789012value2,0123456789012value3"
for (line, value, timestamp) in re.findall("(([^,]+),(.{13}))", input):
print value, timestamp
我想你可以这样做:
direction = []
for line in open(filename):
list = line.split(',')
v = list[0]
for s in list[1:]:
t = s[:13]
direction.append([float(v), long(t)])
v = s[13:]
如果您正在使用 python 3.X,则 long 函数不再存在 -- 使用 int。