我正在编写一个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()
答案 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来说似乎很不寻常。