文章目录

  • 前言
  • 第一天:获取文件名称
    • 知识点
    • 代码示例
  • 第二天 txt和csv文件的读写处理
    • txt文件的筛选与读取
      • 绝对路径与相对路径
      • 读取文件
        • 知识点
        • 代码示例
      • 写文件
        • 知识点
        • 代码示例
      • 补充
        • 代码示例1
        • 代码示例2
    • CSV文件的读取
      • CSV文件
      • 读取CSV文件
        • 打开文件的更好方式
        • 知识点
        • 代码示例1
        • 代码示例2
      • 写文件
        • 代码示例1
        • 代码示例2
      • 项目实战
      • 注意
  • 第三天 Excel文件的概念介绍
  • 总结

前言

(2021年1月24日)对之前买的风变编程中自动化办公的课程进行学习,清掉自己冲动消费后的遗留学习,为期六天,通过这里记录学习笔记,希望能够在6天内掌握基本知识,能够让自己用python解决一些实际问题,提高效率。风变编程学习网址:https://www.pypypy.cn/


第一天:获取文件名称

知识点

1.os(Operating System)全称是叫操作系统模块,它是属于标准库,也就是Python自带的库。它常用于处理文件和目录(文件夹)的操作。例如删除文件、判断文件目录是否存在等功能。
2.os.listdir()它的功能是将某文件夹中,所有文件夹名和文件名获取到。
3.模块是一个py文件,库是多个具有同类功能模块的集合

代码示例

#导入标准库
import os
#输入文件路径
path = r"E:\code\python_code\pandas_python\basic_class"
#获取路径下所有文件及文件夹的名称
filename = os.listdir(path)
print(filename)

文件内容:

运行结果:

['assets.csv', 'auto_email_send.py', 'auto_excel.py', 'heart.gif', 'qrcode.png', 'two_dimension_code.py', 'xinxin.gif']

第二天 txt和csv文件的读写处理

txt文件的筛选与读取

项目背景:将一个文件夹下的所有文件进行筛选,选择txt文件,并在寻找txt文件中是否有关键词,将存在关键词的txt文件路径写入另一个文档中。

绝对路径与相对路径

绝对路径就是文件的完整路径,可通过os模块下的getcwd()获取

import os
print(os.getcwd())

相对路径主要用到...
'./'表示当前路径
'../'表示上一级路径

读取文件

知识点

1.open()打开文件
file = open(filepath,mode,encoding='')
filepath是文件路径,可用绝对路径与相对路径
mode为模式,主要用到r,w,a(只读,只写,追加)
encoding为编码形式,编码形式可以自己查询

2.file.read()读取文件全部内容,返回为一个字符串
content = file.read()
3.file.close()关闭文件
file.close()

代码示例

import os
print(os.getcwd())
path = './data.txt'
file = open(path,'r',encoding='utf-8')
content = file.read()
print(content)
print(type(content))
file.close()


结果:

E:\code\python_code\pandas_python\Office_Automation
111 2222
333
444
555
<class 'str'>

写文件

知识点

1.write()
file.write(content)
可以将content中的内容写到文件中,需向读取文件中打开关闭文件,设置模式为aw

代码示例

path = './data.txt'
content = ['777 888','999']
#模式为追加
file = open(path,'a',encoding='utf-8')
for item in content:#注意换行file.write(item+'\n')
file.close()


由于原文件中的文件指针在555后面,因此下一行的内容直接追加在此行后,在写入之前加入’\n’即可换行

补充

1.readline()读取一行
2.readlines()按行读取,放入列表中
3.直接遍历file对象,可取出每一行内容
4.注意读取完一次文件后,文件指针默认到最后,可通过f.seek()修改

代码示例1

path = './data.txt'
file = open(path,'r',encoding='utf-8')#可以直接读出每行内容,注意每行内容后都有\n
for item in file:print(item,end='')print("距离文件头的距离:",file.tell())
#将文件指针移到文件头
file.seek(1,0)
content1 = file.read()
#content1是一个字符串,按字符进行遍历
for item in content1:print(item,end='')file.seek(1,0)
content2 = file.readline()
#只能读取一行
print(content2,end='')
print(type(content2))file.seek(1,0)
content3 = file.readlines()
#返回一个每行的列表,可以遍历输出每行的值
print(content3)
print(type(content3))

运行结果:

111 2222
333
444
555777 888
999
距离文件头的距离: 37
11 2222
333
444
555777 888
999
11 2222
<class 'str'>
['11 2222\n', '333\n', '444\n', '555777 888\n', '999\n']
<class 'list'>

注意问题:f.seek(0,0)为回到文件头,代码中写成了f.seek(1,0),因此出现从第1个字符后开始读,f.seek(offset,from_what)
1.seek(x,0) : 从起始位置即文件首行首字符开始移动 x 个字符
seek(x,1) : 表示从当前位置往后移动x个字符
seek(-x,2):表示从文件的结尾往前移动x个字符
2. f.writelines()里的内容是一个列表,f.write()写入的内容必须为字符串

代码示例2

path = './data.txt'
file = open(path,'a',encoding='utf-8')
content1 = '112 335\n567 678\n'
content2 = ['111 333\n','222 333\n']
content3 = ['111 333','222 333']
file.writelines(content1)
file.writelines(content2)
file.writelines(content3)

结果:

发现还是需要在列表里的每一行后面手动加换行符的,而且字符串和列表都能当参数!

CSV文件的读取

项目背景:将csv文件中的每一行拆分出来,并复制进每个表中。

CSV文件

csv是"Comma-Separated Values(逗号分割的值)"的首字母缩写,和txt文件一样,是纯文本文件。但csv文件可以显示为电子表格的样式,所以可以把csv文件视为一种简化版的电子表格。常见的Excel表格,不仅有“居中”排版,表格边框等样式,还有各种Excel公式等其他功能,这些功能在csv文件中是不存在的。csv文件是纯文本文件,它只能存储数据。

读取CSV文件

python内置模块csv,可以完成数据的读入和写入,通过import csv导入模块

打开文件的更好方式

1.可以用open()打开,和txt文件类似,与打开txt文本文件稍有不同的地方是,需要在open()中传入新的参数newline=’’,这样可以避免一些不必要的空行
2.为了避免忘记关闭文件造成的错误,可以使用with open(·····) as variable: 打开文件,就不需要使用variable.close()

知识点

读取文件,使用函数reader()和类DictReader两种方式
1.reader()函数会返回一个reader对象,这是一个可迭代对象,该对象里面的每一个元素都是一个列表,每一个列表都对应了csv文件中的一行,语法为csv.reader(csvfile)
2.(1)DictReader类,使用这个类来读取第一行为表头的csv文件,可以更好地反映出表头与文件内容的映射关系。DictReader类的操作类似于常规的reader(),但DictReader会将读取到的信息转换为字典形式。
(2)实例化DictReader类后,会得到一个DictReader对象,这是一个可迭代对象,可以使用循环来遍历它的每一个元素。但不同于reader()的是,该对象里面的每一个元素都是一个字典,每一个字典的值都可以对应csv文件中的一行,键对应csv文件的表头。
(3)这个类还有个属性fieldnames,该属性可以将csv文件(表格)的表头(第一行)读取出来,返回值是列表。这个表头也就是字典的键(key)。

代码示例1

import csvwith open("./material/学生成绩.csv",'r',encoding='utf-8',newline='') as csvfile:grade = csv.reader(csvfile)print(type(grade))for i in grade:print(i)

<class '_csv.reader'>
['\ufeff姓名', '成绩']
['1', '37']
['2', '40']
['3', '43']
['4', '46']
['5', '49']
['6', '52']
['7', '55']
['8', '58']
['9', '61']
['10', '64']
['11', '67']
['12', '70']
['13', '73']
['14', '76']
['15', '79']
['16', '82']
['17', '85']

注意:文件头多了一个\ufeff字符,是因为UTF-8以字节为编码单元,它的字节顺序在所有系统中都是一样的,没有字节序的问题,因此它实际上并不需要BOM(“ByteOrder Mark”);UTF-8 with BOM即utf-8-sig需要提供BOM。将编码方式变为utf-8-sig即可。

with open("./material/学生成绩.csv",'r',encoding='utf-8-sig',newline='') as csvfile:>>>运行结果
['姓名', '成绩']

代码示例2

import csvwith open("./material/学生成绩.csv",'r',encoding='utf-8-sig',newline='') as csvfile:content = csv.DictReader(csvfile)print("用DictReader读出的类型是----->",type(content))#读取表头header = content.fieldnamesprint(header)print("读出表头的类型是:---->",type(header))#遍历for cvs_row in content:print(cvs_row)

运行结果:

用DictReader读出的类型是-----> <class 'csv.DictReader'>
['姓名', '成绩']
读出表头的类型是:----> <class 'list'>
{'姓名': '1', '成绩': '37'}
{'姓名': '2', '成绩': '40'}
{'姓名': '3', '成绩': '43'}
{'姓名': '4', '成绩': '46'}
{'姓名': '5', '成绩': '49'}
{'姓名': '6', '成绩': '52'}
················

写文件

csv模块准备了两种写入方式——函数writer()与类DictWriter。
1.writer()函数是csv模块内的一个函数
(1)当使用open()打开csv文件,得到文件对象后,可以把这个文件对象传入writer()函数。writer()函数会返回一个writer对象,可以调用该对象的方法将字符串文本写入csv文件。(要将内容写入csv文件,需要先把open()返回的文件对象转化为writer对象。)
(2)然后需要调用writer对象的方法writerow(row),该方法会将参数row当作一行内容写入csv文件中。参数row代表了想要写入csv文件的内容,它必须是一个可迭代对象,这里推荐使用列表。如果想通过这个方法写入多行数据。需要借助循环来实现。
2.DictWriter的操作类似于常规的writer(),但DictWriter会将字典写入(映射)到csv文件的行中。即通过DictWriter写入的行,都必须是字典形式,这点和writer()还是有区别的。
当需要将字典类型的数据写入csv文件时,使用DictWriter会是一种更好的选择。
(1)实例化DictWriter
语法:csv.DictWriter(file,fieldnames),fieldnames为表头,必须传入该参数。需要将一个列表传给参数fieldnames,它的作用是设置csv文件的第一行数据(即表头数据)。当我们要将字典通过DictWriter对象写入csv文件时,通常会把字典的键(key)存入一个列表,再把这个列表传给参数fieldnames。
(2)writeheader(),该方法可将表头(即字典中的键(key))写入csv的第一行。如果要写入表头,不仅要在DictWriter中传入参数fieldnames,还需要调用writeheader()方法。
(3)writerow(row),与writer对象调用writerow(row)不同的是,这里的参数row必须是字典形式的数据。在写入时,该方法会根据字典的键,找到相应的表头,然后再将此键对应的值写入表头对应的列。

代码示例1

import csvlist = [["1",400],['2',500]]
with open("./material/test.csv",'w',encoding='utf-8',newline='') as csvfile:#1.先将文件对象转为write对象csv_writer = csv.writer(csvfile)#2.用writerow写入文件for row in list:csv_writer.writerow(row)

结果:

代码示例2

import csvdict = [{"姓名":1,"成绩":20},{"姓名":2,"成绩":30},{"姓名":3,"成绩":40},{"姓名":4,"成绩":50},
]
header = ["姓名","成绩"]
with open("./material/test.csv",'w',encoding='gbk',newline='') as csvfile:#1.先实例化DictWriter对象csv_writer = csv.DictWriter(csvfile,fieldnames=header)#2.用writeheader()写入文件头csv_writer.writeheader()#3.循环遍历将字典内容写入writerow(row)for row in dict:csv_writer.writerow(row)

结果:

注意事项:在这里编码使用的是gbk,最初使用的是utf-8,出现了乱码的现象;(编码还是有不清楚的地方,需要解决)

项目实战

将学生成绩中每一行拆分,保存为新的文件

注意

  1. 当想利用读出的csv内容的行数作为筛选条件时,出现以下错误
info[1+stage*76+video*15:1+stage*76+video*15+15]报错信息:
TypeError: 'DictReader' object is not subscriptable

只需要把它转换成list就可以了

info = list(info)

就可以正常读取啦!

第三天 Excel文件的概念介绍

python -m pip install -i https://pypi.tuna.tsinghua.edu.cn/simple openpyxl --user

总结

未完待续

自动化办公学习笔记(风变编程)相关推荐

  1. python如何实现办公自动化培训_基于python实现自动化办公学习笔记(CSV、word、Excel、PPT)...

    1.CSV (1)写csv文件 import csv def writecsv(path,data): with open(path, "w") as f: writer = cs ...

  2. python 自动办公ppt_基于python实现自动化办公学习笔记(CSV、word、Excel、PPT)

    1.CSV (1)写csv文件 import csvdef writecsv(path,data): with open(path, 'w') as f: writer = csv.writer(f) ...

  3. python自动化办公pdf-基于python实现自动化办公学习笔记

    1.CSV (1)写csv文件 import csv def writecsv(path,data): with open(path, "w") as f: writer = cs ...

  4. python自动化办公脚本下载-基于python实现自动化办公学习笔记二

    word文件 (1)读word文件 import win32com import win32com.client def readWordFile(path): # 调用系统word功能,可以处理do ...

  5. python自动化办公要学多久-基于python实现自动化办公学习笔记三

    Excel (1)写xls文件 # 有序字典 from collections import OrderedDict # 存储数据 from pyexcel_xls import save_data ...

  6. python自动化办公要学多久-基于python实现自动化办公学习笔记

    1.CSV (1)写csv文件 import csv def writecsv(path,data): with open(path, "w") as f: writer = cs ...

  7. 基于python实现自动化办公学习笔记

    1.CSV (1)写csv文件 import csvdef writecsv(path,data):with open(path, "w") as f:writer = csv.w ...

  8. 学习三个月,快乐小四年——感谢风变编程Python课程!

    转眼间又过去了一个高考季,一大批学生迎来他们为期三个月的没有任何作业的暑假.作为一名天天被实验数据折磨到掉头发.被SCI摧残到面容枯槁的毕业生,在表示羡慕的同时,也强烈建议各位学弟学妹去学习风变编程P ...

  9. 风变编程的python课程怎么样-风变编程的Python这么火,零基础可以自学吗?

    随着人工智能技术的高速发展,简单轻快的脚本语言Python开始受到全民热捧,成为大势所趋.而对处于数字化时代的人们而言,除了基本应用外,也要通过学习基本编程调用智能科技产品的API接口.毫无疑问,Py ...

  10. python编程可以自学么-风变编程的Python这么火,零基础可以自学吗?

    随着人工智能技术的高速发展,简单轻快的脚本语言Python开始受到全民热捧,成为大势所趋.而对处于数字化时代的人们而言,除了基本应用外,也要通过学习基本编程调用智能科技产品的API接口.毫无疑问,Py ...

最新文章

  1. [每日短篇] 1D - 消除 if 的一种方法
  2. 085_html5服务器发送事件
  3. ML之SVM:基于SVM(sklearn+subplot)的鸢尾花iris数据集的前两个特征(线性不可分的两个样本),判定鸢尾花是哪一种类型
  4. .Net 3.5 Remoting编程入门三
  5. 构造函数= default;_Python Collections之defaultdict 和 default_factory关系
  6. java 防止反射_Java设计模式(一):单例模式,防止反射和反序列化漏洞
  7. 【BootStrap】初步教程
  8. 51nod-猴猴的比赛【莫队,线段树】
  9. 加载中_GIS地图在项目中的加载显示
  10. 怎样用c语言统计字符个数字,请问这个用c怎么做:输入一串字符,分别统计其中数字和字母的个数...
  11. 一个双线性配对(双线性映射)的例子
  12. windows局域网传文件5种常用方法
  13. lammps案例:空位缺陷对石墨烯力学性能影响模拟
  14. java程序员推荐记笔记_推荐一款开源免费的笔记软件,也是程序员的好帮手
  15. 大厂是如何用DevCloud流水线实现自动化部署Web应用的?
  16. ssl证书是什么,ssl证书有什么作用
  17. N! hdu 1042
  18. 一个人知道自己为什么而活,就可以忍受任何一种生活
  19. csp序列查询(C语言)
  20. 2020 Vue 基于Element-UI开发 手动导入并使用Timeline组件(附组件文件)查看快递信息

热门文章

  1. #Linux中的GCC编程# 20170731 C培训作业
  2. 计算机桌面文件删除不掉是怎么了,电脑删除不了文件怎么办?教你几种好的处理方法,一学就会...
  3. xp系统打印机服务器win7连接不了,Win7无法共享xp打印机的解决方法
  4. 中文邮件分类[朴素贝叶斯、支持向量机、Logistic,TF-IDF,词袋模型]
  5. Internet Explorer 包含五个预定义区域
  6. 2022年最新的编程语言排名
  7. Android shape动态修改颜色
  8. 共模电感适用的频率_共模电感的原理以及使用情况
  9. 洛谷 P4093 [HEOI2016/TJOI2016]序列(Cdq+dp)
  10. c++ primer第16章课后习题答案