第一句子大全,网罗天下好句子,好文章尽在本站!

小白都能学会的Python技术 解决csv和txt的文件处理 提高效率!

时间:2024-01-19

只要跟着以下实现的步骤流程,能耐心的看下去,即使是小白,也能学会这项技能

前言及工具安装:

不管小白也好,还是刚学有成,这篇文章一定对你有用。只要跟着以下实现的步骤流程,能耐心的看下去,即使是小白,也能学会这项技能。因为这些都是很基础的知识,不需要太多的逻辑实现,更谈不到什么数据结构算法,所以学习起来不枯燥、不会感到辛苦和吃力,能让学了马上学有所成,同样能获得成就感爆棚的一项技能。在此学习之前,建议至少先安装好运行代码的工具,比如纯小白学习的话,这款VSCode编辑器工具更为推荐,原因就是它兼容性算比较好,不用下载安装各种模块包,而且直接下载安装搞定。

如果遇到安装问题不知道怎么处理的,免得在网上到处找资料,到处碰壁,有兴趣的可以看下我的这篇文章,是专讲Python工具的安装教程(超详细),包括pycharm、anaconda这两款硬核工具,如果还是不能解决的,「 可以通过评论,看到,会第一时间解决」:

详解Python软件安装教程和配置,小白都能看懂的教程,值得收藏

对于正在工作中的白领也好还是正在上大学的大学生也好,学好一门编程语言,尤其是Python这门语言,在职场上是很有价值的,一来可以提高职场竞争力,二来可以提升工作效率。语言的本质它就是一个工具,我们得会用它,毕竟“工欲善其事必先利其器”。

每个打工者都知道,在工作上,本来要加班到很晚或者是要忙到几天几夜才能完成的工作报表,因为哪天会了python这门技术,会利用这个工具,结果还能提早下班,可以留出那么多的时间去做自己喜欢做的事情。同时还更能让老板看重和同事们的羡慕。不管做运营的,还是财务部门的,还是人力资源部的等等行业,善于利用Python做些自动化办公的技术活岂不是很吃香?(不仅加薪升职,更是精神上的解脱)

工作中碰到最多的无非就是Excel表格和一些普通文件的处理,尤其数量庞大且数据复杂的情况,整理起来会有让人有种快疯狂的节奏。真的是神累、心更累,为了能够解决工作上,对这些问题的困扰,以下谈两个场景,说不定哪天就派上用场了。

一、实现.txt文件要求:

比如,有一天,老板发给了你一个邮件,邮件里面有一个压缩文件,通过下载到电脑之后,你高高兴兴的对文件解压并点开一看,发现文件打开来是成千上万的文件,文件类型也很多,包括了.txt后缀的普通文档,图片(png,jpg,jpeg等格式).csv,.xlsx,压缩包,配置文件等等类型文件,你除了叹气还是叹气。

这时候,比如老板要求叫你,给我找到文件内容信息中要包含有“西瓜”这个关键词的文件,而且要求是.txt文件的,给我整理出来,同时并把这个文件的路径地址一同做成文件发给我。

想想,成千上万的文件,而且要求里面的内容包含老板想要的关键词(西瓜),这时候,难道要对.txt的文件一个一个打开,然后不断去搜索,做复制粘贴的重复性工作吗?如果几千几万个文件,估计加一两个晚上的班,这样的效率不太可能完成,就算可以,也会有出错,或者少漏等情况,毕竟是人工审核。既然如此,我们得想到最好的方法,用工具代替人工,实现更准更快的方法,代替我们双手和精神上的解放吧。

实现步骤流程:

对于这个问题,其实很简单,说了那么多的介绍,接下来干货开始吧,具体看步骤。对于文件的操作,首先是需要先导入“os”这个包,在Python里,os是个标准库,不需要安装,直接拿来使用即可。python的格式,如下所示

步骤1:

import os# 导入os模块

步骤2:

设置保存文件路径,先把老板发的文件存放到任何一个盘符下,如果是在工具上操作,可以放在工具的同一个文件中,这个就取相对路径即可 ./xxxxx格式 的,也可以放在任何盘符,这个就需要取它的绝对路径。在python中,绝对路径的书写方式常用的有两种:

第1种:"C:/Users/zhangSan/Desktop/1.csv"

第2种:"C:UserszhangSanDesktop1.csv"

我保存的是在F盘下,所以我就创建一个文件:

path = "F:TEST"# 创建文件路径

步骤3:

目的是要找到.txt类型的文件,前提我们要先提取出来文件的名称,这个提取方法,咱们用filenames用来保存所有文件名称的,看代码

filenames = os.listdir(path)# 获取读取文件的名称

通过三个步骤,就可以取到所有文件的名称了,整个代码如下所示

import ospath = "D:" #为了测试的,这个随意,文章所写要做的是在F盘下filenames = os.listdir(path)print(filenames)# 打印所有文件名称

结果就把D盘所有文件的名称都打印出来了,如下图所示

步骤4:

咱们把老板要求文件里要有西瓜关键词的这个问题,让用户自己去输入的方式来实现,这里要用到一个函数,"input",代码即如下

key_word = input("请输入你要查找的关键词:")

步骤5:

到了这一步,需要创建一个命名为 result_melon.txt随便命名)的文件来保存含有西瓜关键词的“.txt后缀”的文件,这里以追加方式打开文件:

result_melon = open("F: esult_melon.txt","a",encoding="utf-8")

步骤6:

通过遍历读取到所有的文件名称,用for循环,代码如下所示

for fliename in filenames: # fro循环遍历

步骤7:

因为我们要的是".txt"后缀的文件,所以这里需要用一个if判断语句,来判断在文件名称中是否存在后缀名为.txt的文件,代码如下所示

if ".txt" in filename:# 判断在文件名称中是否存在后缀名为.txt的文件

为了确定是否正确,可以先让其在终端上显示出来,可以输入打印以下信息

print("找到文件了:"+filename)#如果.txt文件存在,就打印出来

到了这里,仅仅是找到了文件而已,而我们要的是这个文件的整个文件路径,所以需要做拼接处理,拼接成完整的文件相对路径,保存到为“target”命名(命名随意)的的目标文件中,代码如下所示

target = path + filename # 拼接成完整的文件相对路径

步骤8:

这一步需要打开读取文件,编码格式为“utf-8”,代码如下所示

file = open(target,"r",encoding="utf-8")# 打开文件

文件的读取,用read()函数,假设用contents来保存.txt文件中包含的所有信息内容,代码如下所示

contents = file.read()# 读文件

最后,有打开文件,就必须要记得关闭文件代码如下所示

file.close()# 关闭文件

步骤9:

知道了所有.txt文件包含的信息,要求是要找到“西瓜”关键词的,所以很好办,还是利用if判断语句就能解决了。即判断输入的关键词是否存在.txt的文件内容当中,因为我们的关键词是通过用户输入的,代码可以这么写

if key_word in contents:# 判断输入的关键词是否在内容中

为了能够确认是否合乎要求,可以将信息打印出来看看,比如

print("真给力,目标文件{}中,包含了{}这个关键词。".format(target,key_word))

其中的 .format()函数 是用来格式化处理,它增强了字符串格式化的功能,代替以前的“%”形式,可以接受不限个参数,位置可以不按顺序,这些了解一下即可。

最后,确定了存在西瓜关键词存在.txt文件当中,那么为了要求的目的,将这个目标文件写入到result_melon中,写入文件用到 write()函数,把读取到的文件写入要保存的文件当中,并且以换行显示,代码如下所示

result_melon.write(target + "n")# 写入文件

步骤10:

这也是最后一步,因为在一开始时,创建并打开了一个命名为result_melon.txt的文件,在完成所有需求操作后,需要关闭文件的操作。

result_melon.close()# 关闭文件

好了,到这里,所有的要求条件就都满足了,接下来,看看整体代码是怎么写的?如下所示

import os # 导入标准库path = "F:TEST" # 创建文件路径filenames = os.listdir(path) # 获取读取文件的名称# 用户输入信息key_word = input("请输入你要查找的关键词:")# 创建一个命名为result_melon.txt的文件,以追加方式打开文件result_melon = open("F: esult_melon.txt", "a", encoding="utf-8")# 遍历读取到的文件名称for filename in filenames: # 判断在文件名称中是否存在后缀名为.txt的文件 if ".txt" in filename: # 找到则打印以下信息 print("找到文件了:" + filename) # 拼接成完整的文件相对路径,保存到为target的目标文件中 target = path + filename file = open(target, "r", encoding="utf-8") # 打开并读取文件 contents = file.read() # contents为.txt文件中包含的所有信息内容 file.close() # 关闭文件 # 判断输入的关键词是否存在.txt的文件内容当中 if key_word in contents: # 存在则打印以下信息 print("真给力,目标文件{}中,包含了{}这个关键词。".format(target, key_word)) result_melon.write(target + "n") # 把读取到的文件写入要保存的文件当中,并且换行显示result_melon.close() # 关闭文件

通过在pycharm编辑器上运行之后,结果如下图所示:

说明代码方面没有任何问题,这时而在目录下也多了一个result_melon.txt的文件,文件打开可以看到,这里面的文件路径“F:TEST343.txt”是存放了包含“西瓜”关键词的文件完整路径,只有包含“西瓜”关键词的才会保存在这个文件里,如下图所示

二、实现csv文件要求:

有一天,你的上司同样发了一封邮件给你,在还没来得及下载打开,这时leader并带着微笑向你走来,告诉你说:“好同志,我发给你的一份csv表格里,是咱们公司几万员工的职位表都包含在里面,现在急要,麻烦你把每个员工做成单独的csv表格放到一个文件夹,压缩后发给我”。几万份,听着很夸张,于是你打开看看,类似这样的表格。

而上司的要求是这样的:

如果换做是你,你会怎么办?几万份不是个小数目,难道要每个都新建新的一张表格,然后复制粘贴吗?这样不仅效率低下,或容易导致输错或疏漏等情况,也容易让人崩溃到极点的地步。按几万份的量来说,靠着复制粘贴的方法,几个晚上也难免能完成得了,而如果通过python,仅前提写好十几二十行代码量,就能分分钟搞定,这样的效率且高,不易出错或疏漏的问题。好,咱们开始看如何来实现的吧。

实现步骤流程:

步骤1:

同样的需要导入 csv模块,Python自带了csv模块,提供用户对csv文件进行读写的操作,命令如下所示

import csv #导入csv模块

下面这是一张测试实验的csv表格,感兴趣的可以拿来一样来测试下,如下表

可以将保存到csv表格文件当中,将这个文件保存到任意盘符都行,我的是放在电脑桌面,设置保存文件路径

employee_path = "C:/Users/80491/Desktop/员工职位表.csv" # 设置保存文件路径

因为还有制作一份文件夹来保存这所有员工的csv表格,所以还需要再设置存放所有员工表的文件路径,这里我同样存放在电脑桌面,将文件夹命名为demo

employees_path = "C:/Users/80491/Desktop/demo/" # 设置存放所有员工表的文件路径

步骤2:

以“”的方式打开员工职位表这个文件,这里利用:with open() as file:的格式,为什么要这么写,不像上面打开文件的写法,这样的写法主要是为了解决在读写打开文件后有时候忘记了close()关闭文件的操作。具体使用方法,如下是官方文档中给出的一个例子

>> import csv>>> with open("names.csv", newline="") as csvfile:... reader = csv.DictReader(csvfile)... for row in reader:... print(row["first_name"], row["last_name"])...Eric IdleJohn Cleese>>> print(row)OrderedDict([("first_name", "John"), ("last_name", "Cleese")])

有个值得注意的地方

在函数里面的参数书写格式里,还要注意编码的格式,如果保存的是“utf-8”的格式,就必须写上编码格式,但最好不要仅仅写“utf-8”:如这样:

with open("names.csv", encoding="utf-8", newline="") as csvfile:

最好是写"utf-8-sig",这样的写法:

with open("names.csv", encoding="utf-8-sig", newline="") as csvfile:

为什么utf-8编码后面要带个“-sig”?主要原因是为了解决多出了一个非法字符("ufeff"),否则会造成读写失败。具体为什么就别管太多了,知道这么用就行了。

但是这个演示的csv表格文件,是没另存为utf-8格式的,所以不需要加上编码格式,否则会报这样的错误提示:

UnicodeDecodeError: "utf-8" codec can"t decode byte 0xc3 in position 0: invalid continuation byte

正确的这么写即可:

with open(employee_path, "r", newline="") as employee_file:# 以读的方式打开文件

到这一步,当然是读取文件了,将文件对象转换为DictReader对象。有人要问了,为什么不需要用read()函数了?不了,这里更推荐使用DictReader的用法。

原因何在?因为在Python的csv模块为我们提供了一种更好的读取方式,当csv文件中若存在映射关系,需要将字典类型的数据读取/写入csv文件时,就使用DictReader/DictWriter这两种方法。虽然read()和write()函数的用法也可以实现,但DictReader/DictWriter可以更好地反映出表头与文件内容的映射关系。

以读的方式或者使用以只写的方式打开文件,都会使用到将文件对象转换为DictReader/DictWriter对象。DictReader和read()的区别就是:前者是个类,后者是个函数(带上"小括号()"),同理,DictWriter和writer()也是一样。

DictReader/DictWriter会将字典读取/写入(映射)到csv文件的行中,会将读取或写入到的信息转换为字典形式。和read()和writer()函数是有一定区别的。

好,介绍到这里,怎么写文件对象转换为DictReader对象?代码如下所示

employee_csv = csv.DictReader(employee_file)

因为我要先将csv对象的表头给读出来,里面用到一个fieldnames属性,其作用是设置csv文件的第一行表头数据,为了确认代码的可行性,把信息打印出来看看,代码如下所示

headers = employee_csv.fieldnames#打印表头信息print("里面的表头信息为:{}".format(headers)

结果如下图所示:

步骤3:

有了表头信息之外,通过遍历除了表头之外的每一行数据,这里用到for循环代码如下所示

for data_row in employee_csv:

遍历之后,我们要先获取它的文件名称+.csv后缀格式,所以这里需要用到拼接处理。“命名”为“filename”的文件来保存这些.csv文件名称,代码如下所示

filename = data_row["名称"] + ".csv" # 拼接处理

最后要将获取到的这些数据进行拼接成新的且完整的文件路径,命名为“filepath”的文件来保存获取到的所有文件的完整路径,代码如下所示

filepath = employees_path + filename # 设置新的且完整的文件路径

为了确认可行性,打印输出信息看看:

print(filepath) # 打印文件所在的完整地址

结果如下图所示:

得到了我们想要的数据。

步骤4:

到这里一步很关键,因为我们要把所有员工的csv表格文件都写入到这个新的文件中,所以要对这个文件进行以写的方式打开文件,代码如下图所示

with open(filepath, "w", newline="") as employees_file: # 以写的方式打开文件

步骤5:

到了这一块知识点很重点,以写方式打开文件是要将文件对象转换为DictWriter对象;跟上面以读取打开文件的方式是要将文件对象转换为DictReader对象,这一点需要记住

参考:在实例化DictWriter的时候,我们需要将一个列表传给参数fieldnames,而且必须要传入该参数,如果要问为什么,死记硬背它即可,就是需要,这是一种约定。目的是因为在设置csv文件的第一行表头数据,当我们要将字典通过DictWriter对象写入csv文件时,通常会把字典的键存入一个列表,再把这个列表传给参数fieldnames。用命名为target_files保存DictReader对象,长这样

代码如下所示

target_files = csv.DictWriter(employees_file, fieldnames = headers)

步骤6:

写入表头,这里使用writeheader()的方法即可实现,代码如下所示

target_files.writeheader() # 写入表头

步骤7:

到了这一步,也是最后一步,完成上司交代任务的关键点,就是写入数据这块了,将数据写入到目标文件中。写入csv表格的数据有几种方法,比如:writerow()和writerows()这两种方法。

1、writerow()方法:

先看这段代码:

import csvmy_list = [10, 11, 12, 13, 14]with open("C:/Users/80491/Desktop/list.csv", "w", encoding="utf-8", newline="") as lists: files = csv.writer(lists) files.writerow(my_list)

从得到的表图中看到,writerow()方法作用是将一个列表全部写入csv的同一行中

2、writerows()方法:

先看这段代码:

import csvmy_lists = [[10], [11], [12], [13], [14]]with open("C:/Users/80491/Desktop/lists.csv", "w", encoding="utf-8", newline="") as lists: files = csv.writer(lists) files.writerows(my_lists)

从表图中看到,writerows()方法作用是将一个二维列表中的每一个列表写为一行(即多行显示)。从这两个方法中看,writerow()接受一维数据,writerows()接受二维数据。

所以很清楚,现在我们的数据是一维数据,只需要用writerow()方法即可,代码如下所示

target_files.writerow(data_row) # 将数据写入到目标文件中

经过以上7个步骤,终于告一段落,完成上司安排的任务了,现在一起看看这整个实现代码是如何写的?

import csv # 导入csv模块# 设置保存文件路径employee_path = "C:/Users/80491/Desktop/员工职位表.csv"# 设置存放所有员工表的路径employees_path = "C:/Users/80491/Desktop/demo/"# 以读的方式打开员工职位表这个文件with open(employee_path, "r", newline="") as employee_file: # 将文件对象转换为DictReader对象 employee_csv = csv.DictReader(employee_file) # 将csv对象的表头给读出来,fieldnames的作用是设置csv文件的第一行表头数据 headers = employee_csv.fieldnames # 打印表头信息 print("里面的表头为:{}".format(headers)) # 遍历除了表头之外的每一行数据 for data_row in employee_csv: filename = data_row["名称"] + ".csv" # 获取文件名 filepath = employees_path + filename # 获取新的文件路径 print(filepath) # 获取所有的csv文件路径并打印在终端上显示 # 以写的方式打开文件 with open(filepath, "w", newline="") as employees_file: # 这一块很重点,是将文件对象转换为DictWriter对象 target_files = csv.DictWriter(employees_file, fieldnames=headers) # 然后写入表头中 target_files.writeheader() # 最后将数据写入到目标文件中 target_files.writerow(data_row)

目前,这个demo是空的文件夹,什么都没有,现在,运行上面的整体代码:

发现pycharm编辑器终端上显示的信息已经全部打印出来:

再看看刚才那个demo文件有何变化?发现有csv表格文件存进去了:

总结:

上面的两个任务总体完成了,这两个要求要实现的代码除注释除外,代码量很少,仅仅几十行而已,却能让你提高工作效率,提早完成上司的要求。说不准,反而还更容易受到上司的爱戴,认为你真的可行,交代事情很靠谱,办事快。所以类似这种简单的要求,这些技巧多少还是得学会的。知识和技能是一点点长进的,追求每天都学一点,吸收-实践-温故...彼此循环。

对于学习编程语言,下面的这句话很是有道理,和大家共勉之。学到很多东西的诀窍,就是一下子不要学很多。——洛克

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。
显示评论内容(4)
  1. 心境之声2024-01-20 06:26心境之声[网友]103.37.213.56
    教程内容实用性很强,不管是个人还是企业都能受益匪浅!
    顶7踩0
  2. 左岸晨曦2024-01-19 23:41左岸晨曦[网友]43.226.138.78
    @飞舞尝试过使用Python处理文件数据后,再也不想回到手动处理的年代了!
    顶7踩0
  3. 飞舞2024-01-19 16:57飞舞[网友]103.12.34.29
    感谢分享这种解决文件处理的技能,确实能提高工作效率!
    顶9踩0
  4. 落红亦美2024-01-19 10:12落红亦美[网友]45.125.46.229
    这个Python技术教程真的很适合初学者,讲解得非常清晰易懂!
    顶2踩0
相关阅读
Python编程语言:使用词云来表示学习和工作报告的主题

Python编程语言:使用词云来表示学习和工作报告的主题

...表中的数据可以一一对应。二维数据的存储格式就是用.csv来存储,数据中的元素要用逗号隔开,还有数据要按行分隔。二维数据的读取方法如下:fo=open(fname)ls=[ ]for line in fo:line=line.replace("/n","")ls.append(line.split(","))fo.close()...

2020-11-05 #经典句子

用Python寄语高考 祝福高三学子高考顺利

用Python寄语高考 祝福高三学子高考顺利

...、jieba2、 wordcloud3、 imageio 一、【准备工作】1、创建一个txt文本文件,文件内容为为高三学习祝福的寄语,保存为高考.txt.2、准备一张外形轮廓为心形的图片heart.jpg。如下图3、安装所需的第三方库。pip install jiebapip install wordcloud...

2010-05-26 #经典句子

python编程从入门到实践:使用文件的内容

python编程从入门到实践:使用文件的内容

...dog","cat")"I really like cats."读取你刚创建的文件learning_python.txt中的每一行,将其中的Python都替换为另一门语言的名称,如C。将修改后的每行都打印到屏幕上。learning_python.txt中的内容为In Python you can broaden your horizons.In Python you can get...

2023-12-08 #经典句子

用Python语言模型和LSTM做一个Drake饶舌歌词生成器

用Python语言模型和LSTM做一个Drake饶舌歌词生成器

...age = "http://metrolyrics.com/{}-lyrics-drake.html"filename = "drake-songs.csv"songs = pd.read_csv(filename)for index, row in songs.iterrows():page = urllib2.urlopen(quote_page.format(row["song"])) soup = BeautifulSoup(page, "html.parser") verses = soup.find_all("p", attrs={"class": "verse"}) ...

2023-12-24 #经典句子

27.Python密码学入门六:手把手破解一首简单替换加密后的英文诗

27.Python密码学入门六:手把手破解一首简单替换加密后的英文诗

...试一试用字母频率来进行破解。先把密文保存成文件 mail.txt接下来就是统计密文里每个字母出现的频率count = {}with open("data/mail.txt") as fr:lines = fr.readlines()for line in lines:for i in range(len(line)):if line[i].isalpha():if line[i].upper() in count:count[l...

2016-02-04 #经典句子

python使用with as处理文件的读写

python使用with as处理文件的读写

...动调用close()方法,同时也解决了异常问题。with open("test.txt","w") as f:f.write("Hello, python!")python文件读写模式:r:以只读方式打开文件,指针放到文件的开头。rb:以二进制格式打开文件用于只读,指针放到文件的开头。r+:打开文...

2020-11-14 #经典句子

python写入中文字符串到文件会报错?解决方法在这里

python写入中文字符串到文件会报错?解决方法在这里

...有效#-*- coding:utf-8 -*-import codecscontent=u"你好"codecs.open("test.txt","a","utf-8").write(content)顺带一个美女镇楼

2009-10-08 #经典句子

柳小白Python学习笔记 6 if语句学习

柳小白Python学习笔记 6 if语句学习

我前面学习的时候都是输入的单行指令,然后让程序执行这行指令。现实中程序往往有很多条指令,也不需要一行一行的执行,而是根据表达式的求值结果来决定执行哪行指令,这里就需要用到控制流语句。什么是表达式?表达...

2008-09-10 #经典句子