将文件下载到内存中

时间:2011-09-30 20:05:02

标签: python temporary-files stringio

我正在编写一个python脚本,我只需要一系列非常小的文本文件的第二行。我想提取这个,而不像我现在那样将文件保存到我的硬盘。

我找到了一些引用TempFile和StringIO模块的线程,但我无法理解它们。

目前我下载所有文件并按顺序命名,如1.txt,2.txt等,然后浏览所有文件并提取第二行。我想打开文件抓取线然后继续查找并打开并读取下一个文件。

以下是我目前将其写入硬盘的方法:

while (count4 <= num_files):
    file_p = [directory,str(count4),'.txt']
    file_path = ''.join(file_p)        
    cand_summary = string.strip(linecache.getline(file_path, 2))
    linkFile = open('Summary.txt', 'a')
    linkFile.write(cand_summary)
    linkFile.write("\n")
    count4 = count4 + 1
    linkFile.close()

2 个答案:

答案 0 :(得分:0)

您可以在每次迭代中打开和关闭输出文件。

为什么不简单地做

with open("Summary.txt", "w") as linkfile:
    while (count4 <= num_files):
        file_p = [directory,str(count4),'.txt']
        file_path = ''.join(file_p)        
        cand_summary = linecache.getline(file_path, 2).strip() # string module is deprecated
        linkFile.write(cand_summary)
        linkFile.write("\n")
        count4 = count4 + 1

此外,linecache可能不是正确的工具,因为它已针对从同一文件中读取多行进行了优化,而不是来自多个文件的同一行。

相反,做得更好

with open(file_path, "r") as infile:
    dummy = infile.readline()
    cand_summary = infile.readline.strip()

此外,如果您放弃strip()方法,则不必重新添加\n,但是谁知道为什么会在那里添加.lstrip()。也许summary = [] for count in xrange(num_files): file_p = [directory,str(count),'.txt'] # or count+1, if you start at 1 file_path = ''.join(file_p) with open(file_path, "r") as infile: dummy = infile.readline() cand_summary = infile.readline().strip() summary.append(cand_summary) 会更好?

最后,手动while循环是什么?为什么不使用for循环?

最后,在您发表评论后,我了解您希望将结果放在列表而不是文件中。行。

总而言之:

{{1}}

答案 1 :(得分:0)

只需在列表中调用append()替换文件写入。例如:

summary = []
while (count4 <= num_files):
    file_p = [directory,str(count4),'.txt']
    file_path = ''.join(file_p)        
    cand_summary = string.strip(linecache.getline(file_path, 2))
    summary.append(cand_summary)
    count4 = count4 + 1

顺便说一句,你通常会写count += 1。它看起来像count4使用基于1的索引。这对Python来说似乎很不寻常。