刚学习 python ,想试试 excel 导入文本,就查询了资料,写了个脚本;

具体功能是实现将一个目录下的所有文本导入同一个 excel ,每个文本对应各自独立的 sheet 页。

我的操作环境是 Linux,但和 Windows 大体一致。

1. 需要用到的模块>>>import os

>>>import xlwtos 模块提供了非常丰富的方法用来处理文件和目录,属于默认模块无需下载。

xlwt、xlrd 分别是对 excel 表格进行写和读的模块,但这两个模块不能处理 xlsx ;本例仅用到 xlwt 模块。如果需要处理 xlsx 文件,则需要用到 openpyxl 模块,而且 openpyxl 可以进行读和写的操作;只是处理时间上稍慢于 xlwt 和 xlrd。(但是随着硬件水平提高,时间将越来越小)

2. 遍历文件夹

首先需要遍历整个文件夹,读取所有文本。其中 filepath 和 xlspath 分别为文件夹路径,以及 xls 的文件路径。def getline(filepath, xlspath):

# 读取所有文本

file_names = os.listdir(filepath)

# 对os.listdir进行排序 指定参数加上 (key=lambda x:int(x))

file_names.sort()

file_ob_list = []

try:

# 获取完整目录名并保存到数组

for file_name in file_names:

file_ob = filepath + "/" + file_name

file_ob_list.append(file_ob)

print(file_ob_list)#测试输出所有的数组

2.1 读取文件并排序

这里需要用到 os.listdir(path) ,它的作用是返回path指定的文件夹包含的文件或文件夹的名字的列表。>>> import os

>>> file_names = os.listdir('.')

>>> print(file_names)

['3.txt', '9.txt', '10.txt', '2.txt', '1.txt', '20.txt']但是我发现 os.listdir() 处理后是一个乱序数组,需要进行排序,如果需要指定特定符号排序,可以用 (key=lambda x:int(x)) ,详细可以百度一下。>>> file_names.sort()

>>> print(file_names)

['1.txt', '10.txt', '2.txt', '20.txt', '3.txt', '9.txt']

#倒着数第四位'.'为分界线,按照‘.’左边的数字从小到大排序

>>> file_names.sort(key=lambda x:int(x[:-4]))

>>> print(file_names)

['1.txt', '2.txt', '3.txt', '9.txt', '10.txt', '20.txt']

2.2 获取文件完整目录等待处理

完整了路径就是目录加上 “/” 加上文件名。

如果你是 window ,目录分隔符是 “\”。for file_name in file_names:

file_ob = filepath + "/" + file_name# 获取完整路径

# 存放到数组中

file_ob_list.append(file_ob)

print(file_ob_list)#测试输出所有的数组

最后输入的内容是文本的绝对路径名:$ python traversal_txt_xls.py

['/root/txt_xls/1.txt', '/root/txt_xls/10.txt', '/root/txt_xls/2.txt', '/root/txt_xls/20.txt', '/root/txt_xls/3.txt', '/root/txt_xls/9.txt']

3. 将数据写入 excel 表格

做法是加入一个 for 循环, 遍历文件夹,并将每个 txt 循环写入到各自的 sheet 页。

3.1 新建表格,以及定义 sheet 名

对于 sheet 的名称,我用的是文本的文件名,当然也可以用正则过滤后缀或者其他名称命名。

需要用到 os.path.basename(),它会获取文件名,如果末尾为 ‘/’ ‘’ ,返回空。# 新建工作表格

xls = xlwt.Workbook()

# 循环读取文件,并写入到表格中

for file_ob in file_ob_list:

# 仅获取文件名,如果末尾为 '/' '\' ,返回空

sheet_name = os.path.basename(file_ob)

3.2 写入表格首先需要添加一个 sheet,名称为 前面的参数 sheet_name, 如果你要固定的名称,可以将参数写成 'sheet 1',这样就是固定名称。# 每一个文本都会新建一个相同文件名的 sheet

sheet = xls.add_sheet(sheet_name, cell_overwrite_ok=True)注意:

在add_sheet 时, 置参数 cell_overwrite_ok=True , 可以覆盖原单元格中数据。

cell_overwrite_ok 默认为 False , 覆盖的话, 会抛出异常.

下面就是 txt 写入 xls,file_ob 代表 txt 文件,

写入表格需要三个参数 ,横纵坐标,以及内容:x, i, data,默认坐标为 (0,0),# txt 写入 xls

f = open(file_ob)

x = 0

# 按行读取文本

while True:

line = f.readline()

如果没有数据,则退出循环。if not line:

break

对于列的读取需要用到 制表符来换列。for i in range(len(line.split('\t'))):

data = line.split('\t')[i]

sheet.write(x,i,data) # x,i,data 代表横、纵坐标和内容

x += 1 #另起一行

# 然后读取下一个文本

f.close()

# 最后保存到文件

xls.save(xlspath)输出的内容展示为:

每行的数据按 制表符 以及 line.split() 分隔:

3.3 去除多余的换行符(19/06/08更新)在处理文本时,excel会把 txt 中多余的换行符导入表格,先将写入内容转换为字符串,在替换换行符。

上面的代码写入可以改成:while True:

line = f.readline()

if not line:

break

for i in range(len(line.split('\t'))):

data = line.split('\t')[i]

data = str(data) #将数据转化为字符串,再对其中的换行符进行处理

data = data.replace('\n', ' ') #使用python中字符串函数替换换行符为空格

sheet.write(x,i,data) # x,i,data 代表横、纵坐标和内容

x += 1

4. 执行函数

首先需要定义参数,filepath 为文件目录,xlspath 为 xls文件的绝对路径。if __name__ == "__main__" :

filepath = "/root/txt_xls" #文件目录

xlspath = "/root/txt_xls.xls"

# 传入参数执行

getline(filepath, xlspath)if __name__ == "__main__" :的作用一个python的文件有两种使用的方法,第一是直接作为脚本执行,第二是import到其他的python脚本中 被调用(模块重用)执行。因此 if __name__ == "__main__" : 的作用就是控制这两种情况执行代码的过程,在if __name__ == "__main__" :下的代码只有在第一种情况下(即文件作为脚本直接执行)才会被执行,而import到其他脚本中是不会被执行的。

整个代码中还有一个 try...except 与 raise 的语句,它的用法是:try...except 语句;分析错误信息源头;

logging记录错误;raise抛出错误

详细看 https://www.jianshu.com/p/66e2e4104e7c 。

5. 最后刚入门 python , 也在不断学习中,尝试着写写博客,可以帮着他人,也可以提高自己。

5.1 展示结果:

5.1 完整代码#!/usr/bin/python3

# -*- coding:utf-8 -*-

###############################################

# Author : SangUn

# EMail : SangUn.Yong@Gmail.com

# Created Time :

# File Name : traversal_txt_xls.py

# Description :

###############################################

'''

当前代码实现一个文件夹内所有文本内容写入同一个 excel

每个文本都有各自独立的 sheet 页

文本单行用制表符分隔,代表多列数据

'''

# 导入模块

import os

import xlwt

def getline(filepath, xlspath):

# 读取所有文本

file_names = os.listdir(filepath)

# 对os.listdir进行排序 指定参数加上 (key=lambda x:int(x[0]))

file_names.sort(key = lambda x:int(x[:-4]))

file_ob_list = []

try:

# 获取完整目录名并保存到数组

for file_name in file_names:

file_ob = filepath + "/" + file_name

file_ob_list.append(file_ob)

print(file_ob_list)

# 新建工作表格

xls = xlwt.Workbook()

# 循环读取文件,并写入到表格中

for file_ob in file_ob_list:

# 仅获取文件名,如果末尾为 '/' '\' ,返回空

sheet_name = os.path.basename(file_ob)

# 每一个文本都会新建一个相同文件名的 sheet

sheet = xls.add_sheet(sheet_name, cell_overwrite_ok=True)

# txt 写入 xls

f = open(file_ob)

x = 0

# 按行读取文本

while True:

line = f.readline()

if not line:

break

for i in range(len(line.split('\t'))):

data = line.split('\t')[i]

data = str(data) #将数据转化为字符串,再对其中的换行符进行处理

data = data.replace('\n', ' ') #使用python中字符串函数替换换行符为空格

sheet.write(x,i,data) # x,i,data 代表横、纵坐标和内容

x += 1

# 然后读取下一个文本

f.close()

xls.save(xlspath)

except:

raise

if __name__ == "__main__" :

filepath = "/root/txt_xls" # 文件目录

xlspath = "/root/txt_xls.xls"# xls 文件绝对路径

# 传入参数执行

getline(filepath, xlspath)

python3遍历电子表格_python 3读取多个文本写入同一个excel,每个文本对应各自独立的 sheet 页...相关推荐

  1. python3遍历电子表格_用openpyxl遍历excel表格

    Python的openpyxl模块,提供了对excel表格的读写操作接口.本文介绍使用openpyxl来遍历excel表格. openpyxl支持Excel 2010 xlsx/xlsm/xltx/x ...

  2. python处理多个excel数据_python 读取多个excel数据写入同一个excel中

    一.将excel数据源存储到同一个excel的不同sheet 中 例如A.xlsx 中有test1,test2 两张sheet.B.xlsx中有test3 一张sheet,存储到C.xlsx中后,C有 ...

  3. python 读取多个excel数据写入同一个excel中

    一.将excel数据源存储到同一个excel的不同sheet 中 例如A.xlsx 中有test1,test2 两张sheet.B.xlsx中有test3 一张sheet,存储到C.xlsx中后,C有 ...

  4. 第一篇 博客:java从数据库读取数据,并写入到excel表格中

    今天,组长分配了查询数据库记录,并把这些记录写入到excel表格中,以前没有尝试过,借鉴了一些别人的代码,最终实现了功能,写一篇博客,总结一下这个过程. 1.准备需要用到的jar包 1.jxl.jar ...

  5. 读取EXCEL文件数据,再调用第三方接口,将第三方数据重新写入到EXCEL文件

    读取EXCEL文件数据,再调用第三方接口,将第三方数据重新写入到EXCEL文件 工作中涉及很多提供文档数据,少则几条,多则上万,少的可以自己编辑一个,静态final来自己定义,一旦数太多得话,就得使用 ...

  6. python打开并读取csv文件_!python3中使用使用read_csv( )读取csv文件,文件路径中含有中文,无法读取怎么处理?...

    python3如何根据csv文件的列的内容,自动建数据库表 你好,csv格式的和excel格式是差不多的, 下面是读取excel的一些函数,希望帮到你: # -*- coding: cp936 -*- ...

  7. python如何读取数据时出现错误_在python3中,关于redis读取数据带有‘b’的问题...

    在python3中,关于redis读取数据带有'b'的问题 #encoding=utf-8 from redis import * #读取数据 d1=input("您输入的数据是:" ...

  8. python批量读取文件内容_Python从数据库读取大量数据批量写入文件的方法

    使用机器学习训练数据时,如果数据量较大可能我们不能够一次性将数据加载进内存,这时我们需要将数据进行预处理,分批次加载进内存. 下面是代码作用是将数据从数据库读取出来分批次写入txt文本文件,方便我们做 ...

  9. python遍历一个文件夹下所有excel,读取所有sheet页,然后写入另一个文件夹下对应模板的excel中

    本来想直接写入,但是我们的excel报表太麻烦了,里面表头有多处要求合并的,用python去写太要命了,想了下,设置一堆空的excel模板,这样只需要把原文件的数据读出来就可以了,简单多了 #读取文件 ...

最新文章

  1. SpringBoot自定义请求参数转换器
  2. echarts柱状图同一页面点击不同得按钮切换_不可思议,这个PPT居然有按钮滑动效果...
  3. CI持续集成系统环境---部署Gitlab环境完整记录
  4. composer php中如何执行,php中composer如何实现类的自动加载(示例讲解)
  5. TomatoLog-1.1.0实现ILoggerFactory
  6. linux卡死在选择内核界面,求助:am3352 linux内核启动时卡在 Starting kernel ...
  7. 安卓加java完成登录_从零学习安卓自动化(java+appium方向):完成登录操作+一个主流程(四)...
  8. 最小生成树-Prim算法的Python实现
  9. 单webview上拉刷新下拉加载
  10. iOS 三步完成购买苹果开发者账号
  11. HRM人力资源管理平台技术总结
  12. 用python编写仓库管理系统_花了一天做的一个简单的仓库管理系统
  13. 事实表和维度表(重点)
  14. 如何删除07版word页眉页脚的横线
  15. RC / RL串联电路计算
  16. arm开发板无法使用dns解析问题
  17. python和c 情侣网名_qq情侣网名个性网
  18. Unable to start debugging.报错
  19. python批量计算cosine distance
  20. CNN网络架构学习:Chapter-5-ResNet(附代码tensorflow)

热门文章

  1. R语言在直方图条(柱形)上添加计数(count)或者百分比(percent)标签
  2. 机器学习数据预处理之缺失值:插值法填充+多项式插值
  3. R语言广义线性模型Logistic回归模型列线图分析(nomogram)
  4. 基于网格的聚类算法STING
  5. 机器学习的核心要素是什么?它们分别作了什么工作?
  6. 基于Java的webapp_几乎所有基于Java的web app都需要Model 2 (part II) (转)
  7. java ip包_java网络抓ip包 首部是个什么情况
  8. 15.使用一样的BFS方法(代码几乎一模一样)解决多道LeetCode题目--542题(01矩阵)1765题(地图中的最高点)994腐烂的橘子
  9. 人脸检测对齐--Joint Face Detection and Alignment using Multi-task Cascaded Convolutional Networks
  10. 快速小目标检测--Feature-Fused SSD: Fast Detection for Small Objects