我无法解析包含以下行的txt文件:
50.0 0.1 [0.03, 0.05, 0.067, 1.003, ...]
50.0 0.134 [0.3465, 0.5476, 1.0, ....]
.
.
.
我不需要每行的开头,只需要列表!列表中的元素不包含相同数量的字符,并用空格和逗号分隔。
我想要做的是忽略每个列表前面的内容并跳转到(例如)列表的第9个元素,读取值并保存。然后转到下一行并执行相同操作。
我的方法:
找到一种解析txt行的方法,作为列表而不是字符串,这样我就可以处理列表中的元素了。
或
设法跳转到列表中的第9个值,然后读取所有内容,直到下一个值(在这种情况下为第10个)。
任何想法如何做到这一点?
答案 0 :(得分:1)
如果您拥有此表单中的每一行:
line = '50.0 0.1 [0.03, 0.05, 0.067, 1.003]\n'
首先删除字符串中不必要的部分。找到'['和']'并使用切片。
line[line.index('[')+1:line.index(']')]
使用分隔符(现在:',')拆分剩余的字符串。你得到一个字符串列表。
line[line.index('[')+1:line.index(']')].split(',')
取第n个元素并用float()或eval()转换它。
float(line[line.index('[')+1:line.index(']')].split(',')[3])
如果你需要列表中的更多元素,那么用'['和']'来评估字符串,你会得到一个列表。 (注意:eval()很慢。)
eval('[0.03, 0.05, 0.067, 1.003]')
代码与此类似:
with open('datas.txt') as f:
n = 8
for line in f:
a = float(line[line.index('[')+1:line.index(']')].split(',')[n])
do_something_with(a)
答案 1 :(得分:0)
由于你的问题不是很好,我会尝试以更广泛的方式回答
如果您的数据格式是统一的,即 一个。方形支架在开始和结束时。 湾数字以空格分隔
使用strip删除任何尾随空格和/或换行符 将其剪切以删除前一个和最后一个字符。
instr="[0.03 0.05 0.067 1.003]"[1:-1]
使用split()将字符串拆分为数字列表。
答案 2 :(得分:0)
如果您需要读取文件并提取每行的第9个元素,您需要执行以下操作:
with open('your_file.txt') as in_file:
my_list = [line.split()[9] for line in in_file]
答案 3 :(得分:0)
假设文本文件结构与发布完全相同。
def openFile(file):
"Usage: list = openFile(filename)"
try:
linesList = []
inputFile = open(file, "r")
tempList = inputFile.readlines()
inputFile.close()
for line in tempList:
linesList.append(line.replace("[","").replace("]","").split())
return linesList
except:
print("Could not open file!")
def saveFile(file, data, element):
"Usage: saveFile('text.txt',myList,9)"
outputFile = open(file, "w")
for line in data:
outputFile.write(line[element-1] + "\n")
outputFile.close()
def main():
myList = openFile("text.txt")
#now you have a list of lists :D
#you can do what ever you want with the data
print(myList)
saveFile("text2.txt",myList,2)
main()
答案 4 :(得分:0)
要删除行上列表开头的字符,一种方法是获取以开括号字符开头的行的切片。这看起来如下:
line = line[line.index('['):]
然后,您可以使用split()或eval()函数处理字符串,将其转换为列表并从该点检索元素。
line = line[line.index('['):].split()[9]