0

我无法解析包含如下行的 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 个)。

任何想法如何做到这一点?

4

5 回答 5

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)
于 2012-04-16T12:12:19.233 回答
0

要删除行上列表开头的字符,一种方法是获取以左括号字符开头的行的切片。这将如下所示:

line = line[line.index('['):]

然后,您可以使用 split() 或 eval() 函数处理字符串,将其转换为列表并从该点检索元素。

line = line[line.index('['):].split()[9]
于 2012-04-15T18:56:49.603 回答
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()
于 2012-04-15T17:26:12.813 回答
0

由于您的问题没有很好的形成,我将尝试以更广泛的方式回答

  1. 线性读取文件。
  2. 如果您的数据格式是统一的,即开头和结尾的方括号。湾。数字用空格隔开

    使用 strip 删除任何尾随空格和/或换行符 Slice 它以删除第一个和最后一个字符 ex。

    instr="[0.03 0.05 0.067 1.003]"[1:-1]

    使用split()将字符串拆分为数字列表。

  3. 索引列表以访问第 9 个元素
  4. 保存它或做任何你想做的计算
于 2012-04-15T16:57:49.917 回答
0

如果您需要读取文件并提取每行的第 9 个元素,则需要执行以下操作:

with open('your_file.txt') as in_file:

    my_list = [line.split()[9] for line in in_file]
于 2012-04-15T17:05:25.783 回答