【问题标题】:reading from multiple txt files - strip data and save to xls从多个 txt 文件中读取 - 剥离数据并保存到 xls
【发布时间】:2011-04-06 17:25:59
【问题描述】:

我对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()

【问题讨论】:

  • 关于风格的一点提示:您不应该在括号内输入空格,所以写open(fileName, "r"),而不是open( fileName, "r" )。您也可能想要使用 with 语句(参见 Dive Into Python 的 section 11.2.5)。最后,使用“a”而不是“w”模式追加到文件。

标签: python excel text


【解决方案1】:

可以压缩在

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 的元素中存在换行符,但后者不引入换行符自己

【讨论】:

  • 谢谢你,我刚试过,它比以前更好,但是这会在 excel 表的一列中填充数据,现在是在 excel 中对数据进行排序还是会有是直接写在脚本里的吗?
  • @Rg786 我不明白您所说的 Excel 工作表中的列。我不使用 Excel 工作表。必须有一个 Python 模块来管理 Excel 工作表。我会研究 Excel 格式(虽然我知道一点..)
  • 我也在研究它,但你帮了很大的忙,谢谢
  • @Rg786 好吧,编写 Excel 文件似乎很容易:它需要编写为 CSV 文件。 CSV的意思是逗号分隔值,但实际上它是一个分隔符分隔值文件,也就是说有一个字符用作列的分隔符。当值中没有分隔符时,使用 Python 编写 CSV 文件很简单,即使没有 Python 的模块 csv。为了管理分隔符可以在值中的情况,可以使用 csv 模块中的格式参数。这个模块很容易使用。
  • @Rg786 如果您想使用更专业的工具来管理 Excel 文件,有一些:参见 (python-excel.org) 和 (sourceforge.net/projects/pyexcelerator) 引用的 (developer.com/tech/article.php/3727616/…)
【解决方案2】:

您可以查看this,对于简单的需求也可以查看csv

【讨论】:

  • 非常有用的链接。谢谢你一定会经历这个。
【解决方案3】:

这些行很“有趣”:

del data_list[0:17] 
del data_list[1:27] # [*:*]

您将删除输入文件的前 17 行,保留第 18 行(如果存在),删除另外 26 行(如果存在),并保留以下所有行.这是一个非常不寻常的过程,在您对您正在尝试做的事情的描述中根本没有提到。

其次,您将每个输出行(如果有)写入同一个输出文件。在脚本结束时,输出文件将仅包含来自最后一个输入文件的数据。 不要更改代码以使用追加模式 ...始终打开和关闭同一个文件只是为了追加记录是非常浪费的,并且只有在您确实需要确保在电源或其他故障的情况下,数据会刷新到磁盘。在开始读取文件之前打开一次输出文件,并在完成所有输入文件后关闭一次。

第三,任何旧的任意文本文件都不会因为您将其命名为“something.xls”而成为“excel 文件”。您应该使用 csv 模块编写它并将其命名为“something.csv”。如果您想更好地控制 Excel 将如何解释它,请使用 xlwt 编写一个 xls 文件。

第四,您多次提到“列”,但由于您没有详细说明如何将输入行拆分为“列”,因此很难猜测“下一个可用列”是什么意思.甚至可能怀疑您混淆了列和行...假设每个输入文件中的行数少于 43 行,那么您将在输出文件中看到最后一个输入文件的第 18 行。

【讨论】:

  • +1 表示第四部分。我觉得有话要说,但我找不到语言来表达它
  • 1.抱歉我的描述不是很清楚,文本文件包含 100 到 375 行之间的任何内容,我需要所有这些尽管如此我只需要导出第 18 行,这是一个开始时间(标题)和其余的值从第 45 行一直运行到最后。无论列表有多长,最后一行始终是“[END]”。 2. 我刚刚意识到这一点,正在寻找优化代码以免浪费的方法,请注意,两周前我还处于学习过程中。
  • 3.我已经更改了代码,所以我现在正在写入 CSV 文件,如果我想操作 CSV 中的数据,这似乎是一种更简单的方法。 4. 所有数据都显示在 A 列中,在此行列表中有行块,我想将其拆分为相邻列(B、C、D..等)。每个块的开始由单元格值“StartTime”和该块的最后一行已知,单元格值为“{END]”。基本上我希望它能够读取列表并将“StartTim”和“[END]”之间的值分开到列中。希望这是有道理的
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-13
  • 2013-10-05
  • 2018-11-14
  • 1970-01-01
  • 2021-01-18
  • 1970-01-01
相关资源
最近更新 更多