首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何打开格式的大文本文件[[skill1,skill2,skill3,.],[skill1,skill4,skill6,.],…. .]巨蟒

如何打开格式的大文本文件[[skill1,skill2,skill3,.],[skill1,skill4,skill6,.],…. .]巨蟒
EN

Stack Overflow用户
提问于 2019-12-13 15:59:53
回答 3查看 136关注 0票数 1

如何打开格式的大文本文件

代码语言:javascript
复制
[[skill1, skill2, skill3, ...], [skill1, skill4, skill6, ...], ….]

在Python里。我试过使用Pandas和numpy,但是read_csv方法或其他类似的方法不起作用。

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

代码语言:javascript
复制
f = open("demofile.txt", "r")
print(f.read(5))
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2019-12-13 16:11:47

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

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

对于巨大的文件,我可能会使用SED。下面的代码执行上述操作。它的工作方式是逐字阅读,并检查上一次读的字符是什么。基于几个ifs,我确定要执行的操作。注意:我只花了几分钟在这个问题上,它肯定会被优化。输入文件不需要有换行符,输出就会有它们。

代码语言:javascript
复制
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以这种方式处理该文件。

票数 1
EN

Stack Overflow用户

发布于 2019-12-13 16:08:56

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

代码语言:javascript
复制
for line in open('yourfile.big'):
    do_something(line)

也许你可以试着把像你这样的大(结构化)数据文件保存在ORC格式的拼板上。

票数 1
EN

Stack Overflow用户

发布于 2019-12-13 17:50:50

我能够使用下面的代码f= open("demofile.txt","r")打印(f.read(5))读取该f.read文件

最新答案:我最后做的是:

代码语言:javascript
复制
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(', ')

上面的代码最终在列表中生成了一个列表。因此,如果我访问l,它给了我技能1。数据的格式如下[skill1,skill2,skill3,.,skill1,skill4,skill6,.,…. .]

有什么想法?

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59325991

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档