我是python的新手,到目前为止我已经编写了下面的代码,它允许我在文件夹中搜索文本文件,然后从中读取所有行,打开excel文件并保存读取行在里面。 (我仍然不确定这是否一个接一个地为所有文本文件做) 运行它之后,我只看到正在读取的文件文本数据并保存到excel文件中(第一列)。或者可能是它将多个文本文件中的数据覆盖到同一列中,直到完成为止。 有没有人能指出我如何通过每个文本文件将剥离的数据写入excel中的下一个可用列?
import os
import glob
list_of_files = glob.glob('./*.txt')
for fileName in list_of_files:
fin = open( fileName, "r" )
data_list = fin.readlines()
fin.close() # closes file
del data_list[0:17]
del data_list[1:27] # [*:*]
fout = open("stripD.xls", "w")
fout.writelines(data_list)
fout.flush()
fout.close()
答案 0 :(得分:3)
可以在
中浓缩import glob
list_of_files = glob.glob('./*.txt')
with open("stripD.xls", "w") as fout:
for fileName in list_of_files:
data_list = open( fileName, "r" ).readlines()
fout.write(data_list[17])
fout.writelines(data_list[44:])
您是否知道 writelines()不会引入换行符? readlines()在阅读期间保留换行符,因此 writelines()在文件中写入的data_list元素中存在换行符,但后者不会引入换行符本身
答案 1 :(得分:2)
答案 2 :(得分:2)
这些线条很“有趣”:
del data_list[0:17]
del data_list[1:27] # [*:*]
您正在删除输入文件的前17个行中的任意数量,保留第18个(如果存在),删除另外26个(如果存在),并保留以下任何行。这是一个非常不寻常的过程,在您对您要做的事情的描述中根本没有提及。
其次,您将每个输出行(如果有)写入同一输出文件。在脚本的末尾,输出文件将仅包含来自最后一个输入文件的数据。 不要将代码更改为使用附加模式 ...只是为了追加记录而打开和关闭同一个文件是非常浪费的,只有在你真正需要确保如果出现电源或其他故障,数据将刷新到磁盘。在开始阅读文件之前打开输出文件一次,在完成所有输入文件后关闭它一次。
第三,任何旧的任意文本文件都不会因为你将其命名为“something.xls”而成为“excel文件”。您应该使用csv模块编写它并将其命名为“something.csv”。如果您想要更好地控制Excel如何解释它,请使用xlwt。
编写一个xls文件第四,您多次提到“列”,但由于您没有提供有关如何将输入行拆分为“列”的任何详细信息,因此很难猜出“下一个可用列”的含义。甚至可能怀疑你是混淆列和行...假设每个输入文件中少于43行,最后一个输入文件的第18行将是你将在输出文件中看到的所有内容。