从多个txt文件读取 - 剥离数据并保存为xls

2 投票
3 回答
19080 浏览
提问于 2025-04-16 15:11

我刚接触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()

3 个回答

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行就是你在输出文件中看到的全部内容。

2

你可以看看这个网站,如果你有简单的需求,也可以参考这个关于csv的文档

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中的元素会有换行符,但writelines()本身并不会添加换行符。

撰写回答