如何在 python 中打开格式为 [[skill1, skill, skill3, ...], [skill 1, skill 4, skill 6, ...], ….] 的大文本文件

How to open a big text file which is in the format [[skill1, skill2, skill3, ...], [skill1, skill4, skill6, ...], ….] in python

如何打开格式为

的大文本文件
[[skill1, skill2, skill3, ...], [skill1, skill4, skill6, ...], ….]

在 Python 中。我尝试使用 Pandas 和 numpy,但 read_csv 方法或其他此类方法不起作用。

更新:我能够使用以下代码行读取 .txt 文件:

f = open("demofile.txt", "r")
print(f.read(5))

您可以尝试逐行读取(如果您的文件是以行格式编写的)并附加数据。

for line in open('yourfile.big'):
    do_something(line)

然后也许您可以尝试将大型(结构化)数据文件保存为 ORC 格式的镶木地板

由于您没有明确提到该文件包含任何换行符,我将使用以下方法。将一些自定义 Python 代码写入

  • 加载文件
  • 搜索并将“”、[”替换为“\n”
  • 搜索并将“[”替换为“”。
  • 将此文件保存在磁盘上并将其加载为 CSV 格式,以“,”作为分隔符。

对于大文件,我可能会使用 SED。以下代码执行上述操作。它的工作原理是逐个字符地读取并检查最后读取的字符是什么。基于几个 if,我确定要执行的操作。注意:我只花了几分钟,它肯定可以优化。输入文件不需要换行符,输出会有换行符。

lastreadchar = ''

with open("data.txt",mode='r') as i, open('out.txt','w') as o:
    while True:
        x = i.read(1)

        if x == '': # end of file has been reached
            break 
        elif x==' ':
            pass
        elif x==']':
            pass
        elif x=='[':
            if lastreadchar == '[': 
                # at the beginning of the file, don't do anything
                pass
            elif lastreadchar == '\n': # a new line
                pass   
            elif lastreadchar == ',': # a new line
                pass
        elif x==',':
            if lastreadchar == ']': # at the beginning of the file
                print('\n')
                o.write('\n')
            else:
                print(x, end='')
                o.write(x)
        else:
            print(x, end = '')            
            o.write(x)

        lastreadchar = x

对于非常大的文本文件(在数 GB 范围内),我可能会使用 SED 以这种方式处理文件。

我能够使用以下代码行读取 .txt 文件 f = open("demofile.txt", "r") print(f.read(5))

已更新ANSWER:What我最后做的是:

with open('file.txt') as f:
    mylist = list(f)
    temp = mylist[0]
    l =  temp.split(']')
    l.pop(0)
    for x in range(0,len(l)):
        l[x] = l[x][3:]
        l[x] = l[x].split(', ')

上面的代码最终生成了一个list inside of list。 所以如果我访问 l[0][0] 它会给我技能 1。 数据格式如下 [[skill1, skill2, skill3, ...], [skill1, skill4, skill6, ...], ....]

想法?