Python从入门到放弃之基础篇(5)
文章目录
- 1.file
- ① 读写方法
- ②.文件对象的方法
- a.read():读取一个文件的内容
- b.readline():会从文件中读取单独的一行,换行符为“\n”,如果返回一个空字符串说明已经读到最后一行
- c.readlines():将会以列表的形式返回该文件中包含的所有行
- d.将内容写入到文件中,然后返回写入的字符数
- e.返回文件对象当前所处的位置,它是从文件开头开始算起的字节数。
- f.改变当前文件指针的位置,seek(offset,from_what)
- g.clise():关闭文件并释放系统的资源。
- h. flush():刷新文件内部缓冲,直接把内部缓冲区的数据立刻写入文件, 而不是被动的等待输出缓冲区写入。
1.file
① 读写方法
Python open() 方法用于打开一个文件,并返回文件对象,在对文件进行处理过程都需要使用到这个函数,如果该文件无法被打开,会抛出 OSError。
注意:使用 open() 方法一定要保证关闭文件对象,即调用 close() 方法。
open(filename,mode)
filename:是一个包含了访问的文件名称的路径字符串
mode:决定了打开文件的模式:只读,写入,追加等,默认文件访问模式为只读®
完整的语法格式为:
open(file, mode=‘r’, buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None)
不同模式打开文件的列表:
r:以只读的方式打开文件,文件的指针将会放在文件的开头,为默认模式
rb:以二进制格式打开一个文件用于只读,文件指针会在文件的开头
r+:打开一个文件用于读写,文件指针将会在文件的开头
rb+:以二进制格式打开一个文件用于读写,文件指针会放在文件的开头
w:打开一个文件用于写入,如果该文件已存在则将会覆盖文件,如果不存在则创建新文件
wb:以二进制打开一个文件用于写入
w+:打开一个文件用于读写
wb+:以二进制格式打开一个文件用于读写,如果文件存在则覆盖,如果不存在则创建新文件
a:打开一个文件用于追加内容,如果文件已存在,文件指针会放在文件的结尾,如果不存在则创建新文件进行写入
ab:以二进制格式打开一个文件用于追加写入
a+:打开一个文件用于读写,如果该文件已存在,文件指针会放在结尾,文件打开时会是追加模式,该文件不存在则创建新文件
ab+:以二进制格式打开一个文件用于追加。
>>> file = open('test1.py','w') #以写模式打开文件 >>> file.write('hello python') 12 >>> file.flush() #刷新文件内容 >>> file.read() #文件不可读 Traceback (most recent call last): File "<stdin>", line 1, in <module> io.UnsupportedOperation: not readable >>> file = open('test1.py','r') #以只读打开文件 >>> file.readline() #读取一行文件内容 'hello python\n' >>> file.readline() 'hello python\n' >>> file.readline() '' >>> file.close() #关闭文件
②.文件对象的方法
a.read():读取一个文件的内容
>>> f = open('/etc/passwd','r') >>> f.read(5) #指定字节数读取 'root:' >>> f.read() #读取文件全部内容 "root:x:0:0:root:/root:/bin/bash\nbin:x:1:1:bin:/bin:/sbin/nologin\ndaemon:x:2:2:daemon:/sbin:/sbin/nologin\nadm:x:3:4:adm:/var/adm:/sbin/nologin\nlp:x:4:7:lp:/var/spool/lpd:/sbin/nologin\nsync:x:5:0:sync:/sbin:/bin/sync\nshutdown:x:6:0:shutdown:/sbin:/sbin/shutdown\nhalt:x:7:0:halt:/sbin:/sbin/halt\nmail:x:8:12:mail:/var/spool/mail:/sbin/nologin\nuucp:x:10:14:uucp:/var/spool/uucp:/sbin/nologin\noperator:x:11:0:operator:/root:/sbin/nologin\ngames:x:12:100:games:/usr/games:/sbin/nologin\ngopher:x:13:30:gopher:/var/gopher:/sbin/nologin\nftp:x:14:50:FTP User:/var/ftp:/sbin/nologin\nnobody:x:99:99:Nobody:/:/sbin/nologin\ndbus:x:81:81:System message bus:/:/sbin/nologin\nvcsa:x:69:69:virtual console memory owner:/dev:/sbin/nologin\nabrt:x:173:173::/etc/abrt:/sbin/nologin\nhaldaemon:x:68:68:HAL daemon:/:/sbin/nologin\nntp:x:38:38::/etc/ntp:/sbin/nologin\nsaslauth:x:499:76:Saslauthd user:/var/empty/saslauth:/sbin/nologin\npostfix:x:89:89::/var/spool/postfix:/sbin/nologin\nsshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin\ntcpdump:x:72:72::/:/sbin/nologin\nvmail:x:5000:5000::/home/vmail:/sbin/nologin\napache:x:48:48:Apache:/var/www:/sbin/nologin\nmysql:x:27:27:MySQL Server:/var/lib/mysql:/bin/bash\nilanni:x:5001:5001::/home/ilanni:/bin/bash\ndovecot:x:97:97:Dovecot IMAP server:/usr/libexec/dovecot:/sbin/nologin\ndovenull:x:498:499:Dovecot's unauthorized user:/usr/libexec/dovecot:/sbin/nologin\n" >>> f.close()
b.readline():会从文件中读取单独的一行,换行符为“\n”,如果返回一个空字符串说明已经读到最后一行
>>> f = open('/etc/passwd','r') >>> f.readline() #读取一行的内容 'root:x:0:0:root:/root:/bin/bash\n' >>> f.readline() 'bin:x:1:1:bin:/bin:/sbin/nologin\n' >>> f.readline() 'daemon:x:2:2:daemon:/sbin:/sbin/nologin\n' >>> f.close()
c.readlines():将会以列表的形式返回该文件中包含的所有行
>>> f = open('/etc/passwd','r') >>> f.readlines() #读取所有行 ['root:x:0:0:root:/root:/bin/bash\n', 'bin:x:1:1:bin:/bin:/sbin/nologin\n', 'daemon:x:2:2:daemon:/sbin:/sbin/nologin\n', 'adm:x:3:4:adm:/var/adm:/sbin/nologin\n', 'lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin\n', 'sync:x:5:0:sync:/sbin:/bin/sync\n', 'shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown\n', 'halt:x:7:0:halt:/sbin:/sbin/halt\n', 'mail:x:8:12:mail:/var/spool/mail:/sbin/nologin\n', 'uucp:x:10:14:uucp:/var/spool/uucp:/sbin/nologin\n', 'operator:x:11:0:operator:/root:/sbin/nologin\n', 'games:x:12:100:games:/usr/games:/sbin/nologin\n', 'gopher:x:13:30:gopher:/var/gopher:/sbin/nologin\n', 'ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin\n', 'nobody:x:99:99:Nobody:/:/sbin/nologin\n', 'dbus:x:81:81:System message bus:/:/sbin/nologin\n', 'vcsa:x:69:69:virtual console memory owner:/dev:/sbin/nologin\n', 'abrt:x:173:173::/etc/abrt:/sbin/nologin\n', 'haldaemon:x:68:68:HAL daemon:/:/sbin/nologin\n', 'ntp:x:38:38::/etc/ntp:/sbin/nologin\n', 'saslauth:x:499:76:Saslauthd user:/var/empty/saslauth:/sbin/nologin\n', 'postfix:x:89:89::/var/spool/postfix:/sbin/nologin\n', 'sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin\n', 'tcpdump:x:72:72::/:/sbin/nologin\n', 'vmail:x:5000:5000::/home/vmail:/sbin/nologin\n', 'apache:x:48:48:Apache:/var/www:/sbin/nologin\n', 'mysql:x:27:27:MySQL Server:/var/lib/mysql:/bin/bash\n', ' 3ff7 ilanni:x:5001:5001::/home/ilanni:/bin/bash\n', 'dovecot:x:97:97:Dovecot IMAP server:/usr/libexec/dovecot:/sbin/nologin\n', "dovenull:x:498:499:Dovecot's unauthorized user:/usr/libexec/dovecot:/sbin/nologin\n"] >>> f.seek(0) #跳指针到开头 0 >>> f.readlines(9) #指定参数读取行 ['root:x:0:0:root:/root:/bin/bash\n'] >>> f.readlines(9) ['bin:x:1:1:bin:/bin:/sbin/nologin\n'] >>> f.readlines(9) ['daemon:x:2:2:daemon:/sbin:/sbin/nologin\n'] >>> f.readlines(10) ['adm:x:3:4:adm:/var/adm:/sbin/nologin\n'] >>> f.readlines(1) ['lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin\n'] >>> f.readlines() ['sync:x:5:0:sync:/sbin:/bin/sync\n', 'shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown\n', 'halt:x:7:0:halt:/sbin:/sbin/halt\n', 'mail:x:8:12:mail:/var/spool/mail:/sbin/nologin\n', 'uucp:x:10:14:uucp:/var/spool/uucp:/sbin/nologin\n', 'operator:x:11:0:operator:/root:/sbin/nologin\n', 'games:x:12:100:games:/usr/games:/sbin/nologin\n', 'gopher:x:13:30:gopher:/var/gopher:/sbin/nologin\n', 'ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin\n', 'nobody:x:99:99:Nobody:/:/sbin/nologin\n', 'dbus:x:81:81:System message bus:/:/sbin/nologin\n', 'vcsa:x:69:69:virtual console memory owner:/dev:/sbin/nologin\n', 'abrt:x:173:173::/etc/abrt:/sbin/nologin\n', 'haldaemon:x:68:68:HAL daemon:/:/sbin/nologin\n', 'ntp:x:38:38::/etc/ntp:/sbin/nologin\n', 'saslauth:x:499:76:Saslauthd user:/var/empty/saslauth:/sbin/nologin\n', 'postfix:x:89:89::/var/spool/postfix:/sbin/nologin\n', 'sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin\n', 'tcpdump:x:72:72::/:/sbin/nologin\n', 'vmail:x:5000:5000::/home/vmail:/sbin/nologin\n', 'apache:x:48:48:Apache:/var/www:/sbin/nologin\n', 'mysql:x:27:27:MySQL Server:/var/lib/mysql:/bin/bash\n', 'ilanni:x:5001:5001::/home/ilanni:/bin/bash\n', 'dovecot:x:97:97:Dovecot IMAP server:/usr/libexec/dovecot:/sbin/nologin\n', "dovenull:x:498:499:Dovecot's unauthorized user:/usr/libexec/dovecot:/sbin/nologin\n"]
d.将内容写入到文件中,然后返回写入的字符数
>>> f = open('test2.py','w') >>> f.write('hello python') #写入内容 12 >>> libex = 'hhhhhhhhhhhhhh' >>> f.write(libex) #按变量写入内容 14 >>> f.close() #关闭文件 >>> [root@python day7]# cat test2.py #内容没有换行符 hello pythonhhhhhhhhhhhhhh[root@python day7]#
e.返回文件对象当前所处的位置,它是从文件开头开始算起的字节数。
>>> f = open('test2.py','r') >>> f.tell() #指针当前位置 >>> f.readline() #读取一行文件后 'hello pythonhhhhhhhhhhhhhh' >>> f.tell() #指针移动26字节数处 >>> f.close() #关闭文件
f.改变当前文件指针的位置,seek(offset,from_what)
from_what的值,如果是0表示开头,如果是1表示当前位置,2表示文件的结尾:
seek(x,0):从文件首行首字符开始移动x个字符
seek(x,1):从当前为往后移动x个字符
seek(-x,2):从文件的结尾往前移动x个字符
from_what值默认为0,即文件开头。
>>> f = open('test3.py','a+') >>> f.readlines() [] >>> f.seek(0) #开头 0 >>> f.readlines() ['aaa\n', 'bbb\n', 'ccc\n', 'ddd\n', 'eee\n'] >>> f.tell() 20
g.clise():关闭文件并释放系统的资源。
>>> f = open('test3.py','r') >>> f.readlines() ['aaa\n', 'bbb\n', 'ccc\n', 'ddd\n', 'eee\n'] >>> f.close() #关闭文件
h. flush():刷新文件内部缓冲,直接把内部缓冲区的数据立刻写入文件, 而不是被动的等待输出缓冲区写入。
③读写操作csv及excle文件
a.读写csv文件
1 import csv 2 3 #读取csv文件内容方法1 4 csv_file = csv.reader(open('testdata.csv','r')) 5 next(csv_file, None) #skip the headers 6 for user in csv_file: 7 print(user) 8 9 #读取csv文件内容方法2 10 with open('testdata.csv', 'r') as csv_file: 11 reader = csv.reader(csv_file) 12 next(csv_file, None) 13 for user in reader: 14 print(user) 15 16 #从字典写入csv文件 17 dic = {'fengju':25, 'wuxia':26} 18 csv_file = open('testdata1.csv', 'w', newline='') 19 writer = csv.writer(csv_file) 20 for key in dic: 21 writer.writerow([key, dic[key]]) 22 csv_file.close() #close CSV file 23 24 csv_file1 = csv.reader(open('testdata1.csv','r')) 25 for user in csv_file1: 26 print(user)
b.读写excle文件
1 import xlrd, xlwt #xlwt只能写入xls文件 2 3 #读取xlsx文件内容 4 rows = [] #create an empty list to store rows 5 book = xlrd.open_workbook('testdata.xlsx') #open the Excel spreadsheet as workbook 6 sheet = book.sheet_by_index(0) #get the first sheet 7 for user in range(1, sheet.nrows): #iterate 1 to maxrows 8 rows.append(list(sheet.row_values(user, 0, sheet.ncols))) #iterate through the sheet and get data from rows in list 9 print(rows) 10 11 #写入xls文件 12 rows1 = [['Name', 'Age'],['fengju', '26'],['wuxia', '25']] 13 book1 = xlwt.Workbook() #create new book1 excle 14 sheet1 = book1.add_sheet('user') #create new sheet 15 for i in range(0, 3): 16 for j in range(0, len(rows1[i])): 17 sheet1.write(i, j, rows1[i][j]) 18 book1.save('testdata1.xls') #sava as testdata1.xls
2.os模块
os(operate system)模块提供了多数操作系统的功能接口函数。当os模块被导入后,它会自适应于不同的操作系统平台,根据不同的平台进行相应的操作,在python编程时,经常和文件、目录打交道,所以离不了os模块。
常用的os模块命令
- os.name——name顾名思义就是’名字’,这里的名字是指操作系统的名字,主要作用是判断目前正在使用的平台,并给出操作系统的名字,如Windows 返回 ‘nt’; Linux 返回’posix’。注意该命令不带括号。
- os.getcwd()——全称应该是’get current work directory’,获取当前工作的目录,如:返回结果为:‘C:\Program Files\Python36’。注意该命令带括号,除了第一个命令不带括号之外,以下命令基本都带括号。
- os.listdir(path)——列出path目录下所有的文件和目录名。Path参数可以省略。例:
以列表的形式全部列举出来,其中没有区分目录和文件。 - os.remove(path)——删除path指定的文件,该参数不能省略。
- os.rmdir(path)——删除path指定的目录,该参数不能省略。
- os.mkdir(path)——创建path指定的目录,该参数不能省略。
注意:这样只能建立一层,要想递归建立可用:os.makedirs() - os.path.isfile(path)——判断指定对象是否为文件。是返回True,否则False
- os.path.isdir(path)——判断指定对象是否为目录。是True,否则False。例
- os.path.exists(path)——检验指定的对象是否存在。是True,否则False.例:
- os.path.split(path)——返回路径的目录和文件名,即将目录和文件名分开,而不是一个整体。此处只是把前后两部分分开而已。就是找最后一个’/’。
- os.system(cmd)——执行shell命令。返回值是脚本的退出状态码,0代表成功,1代表不成功,例:
- os.chdir(path)——'change dir’改变目录到指定目录
- os.path.getsize()——获得文件的大小,如果为目录,返回0
- os.path.abspath()——获得绝对路径。
- os.path.join(path, name)—连接目录和文件名,与os.path.split(path)相对。
16.os.path.basename(path)——返回文件名 - os.path.dirname(path)——返回文件路径
https://www.geek-share.com/detail/2726905548.html
https://blog.csdn.net/xxlovesht/article/details/80913193
3.datetime
datetime模块常用的主要有下面这四个类:
-
datetime.date: 是指年月日构成的日期(相当于日历)
-
datetime.time: 是指时分秒微秒构成的一天24小时中的具体时间(相当于手表)
-
datetime.datetime: 上面两个合在一起,既包含时间又包含日期
-
datetime.timedelta: 时间间隔对象(timedelta)。一个时间点(datetime)加上一个时间间隔(timedelta)可以得到一个新的时间点(datetime)。
-
1.datetime.date 类1.datetime.date 类
1.新建一个date对象,日期为今天,既可以直接调用datetime.date.today(),也可以直接向datetime.date()传值,如下:In [4]: today = datetime.date.today()
In [5]: today
Out[5]: datetime.date(2014, 8, 15)
In [6]: t = datetime.date(2014,8,15)
In [7]: t
Out[7]: datetime.date(2014, 8, 15)
2.datetime.date.strftime(format) 格式化为需要的时间,如常用的 “年-月-日 小时:分钟:秒” 格式
In [8]: today.strftime('%Y-%m-%d %H:%M:%S') Out[8]: '2014-08-15 00:00:00’
date对象中小时、分钟、秒默认都是0,纪元年的那个时间
3.datetime.date.timple() 转成struct_time格式,这样传递给time.mktime(t) 后,直接转成时间戳格式
In [9]: today.timetuple() Out[9]: time.struct_time(tm_year=2014, tm_mon=8, tm_mday=15, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=4, tm_yday=227, tm_isdst=-1) In [10]: time.mktime(today.timetuple()) Out[10]: 1408032000.0
4.datetime.date.replace(year, month, day) 返回一个替换后的date对象
In [11]: today.replace(year=2013) Out[11]: datetime.date(2013, 8, 15)
5.datetime.date.fromtimestamp(timestamp) 将时间戳转化为date对象
In [12]: datetime.date.fromtimestamp(1408058729) Out[12]: datetime.date(2014, 8, 15)
2.datetime.time 类
1.新建一个time对象
In [15]: t Out[15]: datetime.time(8, 45, 20)
2.datetime.time.(format)格式化输出
In [16]: t.strftime('%Y-%m-%d %H:%M:%S') Out[16]: '1900-01-01 08:45:20’
time对应的年、月、日为1900、01、01,纪元年的那个时间
3.datetime.time.replace([hour[, minute[, second[, microsecond[, tzinfo]]]]]) 返回一个替换后的time对象
In [17]: t.replace(hour=9) Out[17]: datetime.time(9, 45, 20)
3.datetime.datetime类
1.新建一个datetime对象,日期为今天,既可以直接调用datetime.datetime.today(),也可以直接向datetime.datetime()传值,如下:
In [21]: d1 = datetime.datetime.today() In [22]: d1 Out[22]: datetime.datetime(2014, 8, 15, 8, 12, 34, 790945) In [23]: d2 = datetime.datetime(2014, 8, 15, 8, 12, 34, 790945) In [24]: d2 Out[24]: datetime.datetime(2014, 8, 15, 8, 12, 34, 790945)
2.datetime.datetime.now([tz]) 当不指定时区时,和datetime.datetime.today()是一样的结果,如下
In [25]: datetime.datetime.now() Out[25]: datetime.datetime(2014, 8, 15, 8, 14, 50, 738672) 3..datetime.datetime.strftime(format) 格式化为需要的时间,如常用的 “年-月-日 小时:分钟:秒” 格式 In [27]: d1 Out[27]: datetime.datetime(2014, 8, 15, 8, 12, 34, 790945) In [28]: d1.strftime('%Y-%m-%d %H:%M:%S') Out[28]: '2014-08-15 08:12:34’
4.datetime.datetime.timple() 转成struct_time格式,这样传递给time.mktime(t) 后,直接转成时间戳格式
In [29]: d1 Out[29]: datetime.datetime(2014, 8, 15, 8, 12, 34, 790945) In [30]: d1.timetuple() Out[30]: time.struct_time(tm_year=2014, tm_mon=8, tm_mday=15, tm_hour=8, tm_min=12, tm_sec=34, tm_wday=4, tm_yday=227, tm_isdst=-1) In [31]: time.mktime(d1.timetuple()) Out[31]: 1408061554.0
5.datetime.datetime.replace(year, month, day) 返回一个替换后的date对象
In [32]: d1 Out[32]: datetime.datetime(2014, 8, 15, 8, 12, 34, 790945) In [33]: d1.replace(year=2000) Out[33]: datetime.datetime(2000, 8, 15, 8, 12, 34, 790945)
6.datetime.datetime.fromtimestamp(timestamp) 将时间戳转化为datetime对象
In [34]: time.time() Out[34]: 1408061894.081552 In [35]: datetime.datetime.fromtimestamp(1408061894) Out[35]: datetime.datetime(2014, 8, 15, 8, 18, 14) 4.datetime.timedelta类
没啥好说的,主要做时间的加减法用,如下:
In [78]: today = datetime.datetime.today() In [79]: yesterday = today - datetime.timedelta(days=1) In [80]: yesterday Out[80]: datetime.datetime(2014, 8, 14, 15, 8, 25, 783471) In [81]: today Out[81]: datetime.datetime(2014, 8, 15, 15, 8, 25, 783471)
4.类和对象
5.http请求
- Python 学习从入门到放弃(三)--变量与函数基础、基础控制语句
- Python 学习从入门到放弃(一)-Python 基础介绍
- # Python 学习从入门到放弃(四)--类和模块的基础知识
- Python基础理论知识 Python从入门到放弃系列
- 萌新:从零基础入门到放弃,人生苦短,是否要放弃python?
- python爬虫从入门到放弃(一)之初识爬虫
- (转)Python零基础从入门到进阶学习书单
- Python入门基础知识总结
- Python基础入门(5)
- Python基础入门
- Python零基础入门之十五类中的魔法方法
- Python爬虫入门(2):爬虫基础了解
- 【零基础入门学习Python笔记005】闲聊之Python的数据类型
- python入门基础教程08 函数的形参与实参
- python入门基础教程04 Python程序基本组成
- Python爬虫从入门到放弃(十七)之 Scrapy框架中Download Middleware用法
- Python入门基础语法之字符串、列表、元组
- 2019最新python3完全零基础入门视频
- 【零基础】Python的入门学习
- Python入门1-编程基础和字符串