【问题标题】:combine big text files with python将大文本文件与 python 结合起来
【发布时间】:2020-11-08 14:39:28
【问题描述】:

我有一堆具有下一种格式的文本文件

word(1) num(1,1) num(1,2) num(1,3) ... num(1,300)
word(2) num(2,1) num(2,2) num(2,3) ... num(2,300)
word(3) num(3,1) num(3,2) num(3,3) ... num(3,300)
...
word(n) num(n,1) num(n,2) num(n,3) ... num(n,300)

文件的名称是 palabrasX.txt,其中 X 是一个数字,表示在文件中构成单词的字符串的长度(从 1 到 32),例如,如果单词是“cat”那么应该在 palabras3.txt 里面

那么真正的问题是其中一些文件太大而无法通过正常方式打开,我想制作一个包含这些文件所有信息的大文件,所以我会先拥有所有带有1个字符的单词然后所有带 2 的单词,依此类推,直到 32

我正在尝试这样的事情:

# encoding: utf-8
filenames = {}
for i in range(32):
    filenames[i]="palabras"+str(i+1)+".txt"
    with open("VectoresPalabrasEspañol\TodasMisPalabras.txt", "w") as outfile:
        for fname in filenames:
            with open(fname) as infile:
                for line in infile:
                    outfile.write(line)

但它仍处于工作状态,所以我不确定我的逻辑是否有问题,或者我是否触发了无限循环或其他原因。

顺便说一下,完整文件的路径是:

"VectoresPalabrasEspañol\TodasMisPalabras.txt"

palabraX.txt 的路径是:

f"palabras\Probables palabras\palabras{length}.txt"

【问题讨论】:

  • 文件太大而无法通过正常方式打开,:阅读sqlite3 — DB-API 2.0 interface for SQLite databases,它允许SELECT * WHERE word_len = xx 在范围1 - 32
  • 如果我触发了无限循环或其他原因:在for fname in ... 之后添加一个print(fname),看看你会得到什么。跨度>
  • for fname in prints "palabras1.txt","palabras2.txt",依此类推直到 32
  • 在尝试了@safiqulislam 给出的答案中的代码后,我意识到真正的问题是filenames[i] 应该有文件完整路径的字符串,而不仅仅是文件名文件
  • 打印“palabras1.txt”、“palabras2.txt”等直到32:这不可能!你会得到dict key 值,即:0 0 1 0 1 2 0 ....

标签: python python-3.x file text


【解决方案1】:

你可以这样编码

这里的文件路径是当前目录

import os

filenames = []

for i in range(32):
    filenames.append("palabras"+str(i+1)+".txt")

with open("TodasMisPalabras.txt", "w") as outfile:
        for fname in filenames:
            # fname=fname[1]
            if os.path.exists(fname):
                with open(fname) as infile:
                    for line in infile:
                        outfile.write(line)

【讨论】:

  • OP 想要排序 “首先排序所有带有 1 个字符的单词,然后是所有带有 2 的单词,依此类推,直到 32”。您的示例在哪里实现了这一点?
  • @stovfl 如果我理解这个问题是......文件名数组包含排序后的 ('palabras1.txt','palabras2.txt',......)文件名.......所以在文件名循环中写入'palabras1.txt'文件数据将首先写入一个大文件,依此类推
  • 每个文件都包含word(1), word(2), word(n),并且OP希望在大文件中:所有32个文件中的word(1), word(1), word(1) ...,然后是word(2), word(2), word(2) ...等等。
  • 我有一个愚蠢的问题,你代码中的注释有实际作用吗?最近,我发现一些 cmets 像 # encoding: utf-8 这样的活动代码
  • @MiguelFernandoMaciasMacias 不,你可以删除它
猜你喜欢
  • 1970-01-01
  • 2020-02-03
  • 1970-01-01
  • 1970-01-01
  • 2015-03-28
  • 1970-01-01
  • 2016-03-08
  • 2018-07-19
  • 1970-01-01
相关资源
最近更新 更多