我是靠谱客的博主 大胆钢铁侠,最近开发中收集的这篇文章主要介绍python基础打卡 第五次1.file,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

1.file

a.打开文件方式(读写两种方式)

Python内置的open()函数打开一个文件,创建一个file对象,然后调用相关的方法才可以它进行读写。

格式: file object = open(file_name [, access_mode][, buffering])

各个参数的细节如下:

  • file_name:file_name变量是一个包含了你要访问的文件名称的字符串值。
  • access_mode:access_mode决定了打开文件的模式:只读,写入,追加等。所有可取值见如下的完全列表。这个参数是非强制的,默认文件访问模式为只读(r)。
  • buffering:如果buffering的值被设为0,就不会有寄存。如果buffering的值取1,访问文件时会寄存行。如果将buffering的值设为大于1的整数,表明了这就是的寄存区的缓冲大小。如果取负值,寄存区的缓冲大小则为系统默认。

读和写的区别在于access_mode的不同,总共有下面几种常用的:

 

t文本模式 (默认)。
b二进制模式。
+打开一个文件进行更新(可读可写)。
r以只读方式打开文件。文件的指针将会放在文件的开头。这是默认模式。
rb以二进制格式打开一个文件用于只读。文件指针将会放在文件的开头。这是默认模式。一般用于非文本文件如图片等。
r+打开一个文件用于读写。文件指针将会放在文件的开头。
rb+以二进制格式打开一个文件用于读写。文件指针将会放在文件的开头。一般用于非文本文件如图片等。
w打开一个文件只用于写入。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。
wb以二进制格式打开一个文件只用于写入。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。一般用于非文本文件如图片等。
w+打开一个文件用于读写。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。
wb+

以二进制格式打开一个文件用于读写。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。一般用于非文本文件如图片等。

 

b.文件对象的操作方法

file对象相关的所有属性:

属性描述
file.closed返回true如果文件已被关闭,否则返回false。用 close()方法关闭文件是一个很好的习惯。
file.mode返回被打开文件的访问模式。
file.name返回文件的名称。
file.softspace如果用print输出后,必须跟一个空格符,则返回false。否则返回true。

write()方法

write()方法可将任何字符串写入一个打开的文件,并且不会在字符串的结尾添加换行符('n')

read()方法

read()方法从一个打开的文件中读取一个字符串。

 

c.学习对excel及csv文件进行操作

 

2.os模块

 Python os模块包含普遍的操作系统功能

 1 #这里列举在os模块中关于文件/目录常用的函数使用方法
 2 
 3 #这里需要注意下,在使用这些方法前记得导入os模块
 4 import os #导入os模块
 5 """
 6 os对象方法:
 7     os.getcwd()             #返回当前工作目录
 8     os.chdir(path)             #改变工作目录
 9     os.listdir(path=".")     #列举指定目录中的文件名("."表示当前目录,“..”表示上一级目录)
10     os.mkdir(path)             #创建建单层目录,如果该目录已存在则抛出异常
11     os.makedirs(path)         #递归创建多层目录,如该目录已存在抛出异常,
12     os.remove(path)         #删除文件
13     os.rmdir(path)             #删除单层目录,如该目录非空则抛出异常
14     os.removedirs(path)     #递归删除目录,从子目录到父目录逐层尝试删除,遇到目录非空则抛出异常
15     os.rename(old,new)         #将文件old重命名为new
16     os.system(command)         #运行系统shell命令
17     os.walk(top)             #遍历top路径以下所有子目录,返回一个三元组:(路径,[包含目录],[包含文件])
18     os.curdir                #属性,表示当前目录
19     os.pardir                #属性,表示上一级目录
20     os.sep                    #属性,输出操作系统特定的路径分隔符(win下为'\',Linux下为'/')
21     os.linesep                #属性,当前平台使用的行终止符(Win下为‘rn’,Linux下为'n')
22     os.name                    #属性,指待当前使用的操作系统
23     
24 os.path对象方法:
25     os.path.basename(path)    #去掉目录路径,单独返回文件名
26     os.path.dirname(path)    #去掉文件名,单独返回目录路径
27     os.path.join(path1[,],path2[,...]) #将path1,path2各部分组成一个路径名
28     os.path.split(path)        #分割文件名和路径,返回一个(f_path,f_name)元组,如果完全使用目录,它也会将最后一个目录作为文件名分离
29     os.path.splitext(path)    #分离文件名和后缀名,返回(f_name,f_extension)元组,如果完全使用目录,它也会将最后一个目录作为文件名分离
30     os.path.getsize(file)    #返回指定文件的尺寸,单位是字节
31     os.path.getatime(file)    #返回指定文件最近的访问时间(浮点型秒数,可用time模块的gmtime()或localtime()函数换算)
32     os.path.getctime(file)    #返回指定文件的创建时间
33     os.path.getmtime(file)    #返回指定文件最新的修改时间
34     os.path.exists(path)    #判断指定路径是否存在(目录或者文件)
35     os.path.isabs(path)        #判断是否为绝对路径
36     os.path.isdir(path)        #判断指定路径是否存在且是一个目录
37     os.path.isfile(path)    #判断指定路径是否存在且是一个文件
38     os.path.islink(path)    #判断指定路径是否存在且是一个符号链接
39     os.path.ismount(path)    #判断指定路径是否存在且是一个挂载点
40     os.path.samefile(path1,path2)    #判断path1,path2是否指向同一个文件
41         
42 """

 

3.datetime模块

datetime模块的对象有如下:

  • timedelta
  • date
  • datetime
  • time
  • tzinfo

还包含以下两个常量:

  • datetime.MINYEAR (它返回的是1)
  • datetime.MAXYEAR(它返回的是9999)

datetime对象

构造方法: class datetime.datetime(year, month, day[, hour[, minute[, second[, microsecond[, tzinfo]]]]]) 

year, month 和 day 参数是必须的,其他参数可选, 参数tzinfo表示可选的时区信息,一般我们也用不到。

from datetime import datetime as dt
t=dt(2017,6,1,hour=13,minute=17,second=30)
print(type(t))
print(t)

输出:
<type 'datetime.datetime'>
2017-06-01 13:17:30

如果我们只传参数year, month, day,那么时间会默认变成00:00:00

datetime对象的几个方法:

  • datetime.today() 返回本地当前的时间
  • datetime.now([tz]) 返回本地当前的日期和时间。如果可选的参数 tz 为 None 或者没有指定,就如同today()

4.类和对象

类:

定义类是通过class关键字:

二:类中对象初始化:

对象:

对象(实类)是根据类创建出来的一个个具体的“实类”,每个对象都拥有相同的方法,但各自的数据可能不同(初始化不同)。

 

5.正则表达式

  1. 正则表达式定义: 正则表达式是一个特殊的字符序列,它能帮助你方便的检查一个字符串是否与某种模式匹配。
    python正则表达式: re模块使python语言拥有全部的正则表达式功能。

  2. 为什么使用正则表达式?
    通过使用正则表达式,可以:
    (1)测试字符串内的模式。例如,可以测试输入字符串,以查看字符串内是否出现电话号码模式或信用卡号码模式。这称为数据验证。
    (2)替换文本。可以使用正则表达式来识别文档中的特定文本,完全删除该文本或者用其他文本替换它。
    (3)基于模式匹配从字符串中提取子字符串。可以查找文档内或输入域内特定的文本。

  3. 使用步骤:
    (1)使用 compile()函数将正则表达式的字符串编译成一个 pattern 对象
    (2)通过 pattern 对象的一些方法对文本进行匹配,匹配结果是一个 match对象
    (3)用 match 对象的方法,对结果进行操作

  4. 正则表达式模式
    模式字符串使用特殊的语法来表示一个正则表达式:
    (1)字母和数字表示他们自身。一个正则表达式模式中的字母和数字匹配同样的字符串。
    (2)多数字母和数字前加一个反斜杠时会拥有不同的含义。
    (3)标点符号只有被转义时才匹配自身,否则它们表示特殊的含义。
    (4)反斜杠本身需要使用反斜杠转义。
    (5)由于正则表达式通常都包含反斜杠,所以你最好使用原始字符串来表示它们。模式元素(如 r’t’,等价于 ‘t’)匹配相应的特殊字符。
    下表列出了正则表达式模式语法中的特殊元素。如果你使用模式的同时提供了可选的标志参数,某些模式元素的含义会改变。

模式描述
^匹配字符串的开头
$匹配字符串的末尾
.匹配任意字符,除了换行符,当re.DOTALL标记被指定时,则可以匹配包括换行符的任意字符
[…]用来表示一组字符,单独列出:[amk] 匹配 ‘a’,‘m’或’k’
[^…]不在[]中的字符:[^abc] 匹配除了a,b,c之外的字符
re*匹配0个或多个的表达式
re+匹配1个或多个的表达式
re?匹配0个或1个由前面的正则表达式定义的片段,非贪婪方式
re{ n}精确匹配 n 个前面表达式。例如, o{2} 不能匹配 “Bob” 中的 “o”,但是能匹配 “food” 中的两个 o。
re{ n,}匹配 n 个前面表达式。例如, o{2,} 不能匹配"Bob"中的"o",但能匹配 "foooood"中的所有 o。“o{1,}” 等价于 “o+”。“o{0,}” 则等价于 “o*”。
re{ n, m}匹配 n 到 m 次由前面的正则表达式定义的片段,贪婪方式
(re)匹配括号内的表达式,也表示一个组
(?imx)正则表达式包含三种可选标志:i, m, 或 x 。只影响括号中的区域
(?-imx)正则表达式关闭 i, m, 或 x 可选标志。只影响括号中的区域
(?: re)类似 (…), 但是不表示一个组
(?imx: re)在括号中使用i, m, 或 x 可选标志
(?-imx: re)在括号中不使用i, m, 或 x 可选标志
(?#…)注释.
(?= re)前向肯定界定符
(?! re)前向否定界定符
(?> re)匹配的独立模式,省去回溯
w匹配字母数字及下划线
W匹配非字母数字及下划线
s匹配任意空白字符,等价于 [tnrf]
S匹配任意非空字符
d匹配任意数字,等价于 [0-9]
D匹配任意非数字
A匹配字符串开始
Z匹配字符串结束,如果是存在换行,只匹配到换行前的结束字符串
z匹配字符串结束
G匹配最后匹配完成的位置
b匹配一个单词边界,也就是指单词和空格间的位置。例如, ‘erb’ 可以匹配"never" 中的 ‘er’,但不能匹配 “verb” 中的 ‘er’。
B匹配非单词边界。‘erB’ 能匹配 “verb” 中的 ‘er’,但不能匹配 “never” 中的 ‘er’。
n, t, 等.匹配一个换行符。匹配一个制表符。等
1…9匹配第n个分组的内容
10匹配第n个分组的内容,如果它经匹配。否则指的是八进制字符码的表达式
5.贪婪与非贪婪模式
(1)贪婪模式:在整个表达式匹配成功的前提下, 尽可能多的匹配
(2)非贪婪模式:在整个表达式匹配成功的前提下, 尽可能少的匹配( 多加个?
(3)python里面数量词默认是 贪婪模式

6.re模块

结合上面的正则表达式: re模块使python语言拥有全部的正则表达式功能。

re模块常用的方法:

(1)re.match: 从字符串的起始位置匹配一个模式,如果不是起始位置匹配成功的话,match()就返回none。
函数语法:re.match(pattern, string, flags=0)
函数参数说明:pattern:匹配的正则表达;string:要匹配的字符串;flags:标志位,用于控制正则表达式的匹配方式

我们可以使用group(num) 或 groups() 匹配对象函数来获取匹配表达式

匹配对象方法描述
group(num=0)匹配的整个表达式的字符串,group() 可以一次输入多个组号,在这种情况下它将返回一个包含那些组所对应值的元组。
groups()返回一个包含所有小组字符串的元组,从 1 到 所含的小组号。

实例代码:

##正则化
import re
print(re.match('www', 'www.runoob.com').span())  # 在起始位置匹配
print(re.match('com', 'www.runoob.com'))         # 不在起始位置匹配

结果为:

(0, 3)
None

(2)re.search:任何位置开始查找,返回第一个成功的匹配。匹配成功re.search方法返回一个匹配的对象,否则返回None。
函数语法:re.search(pattern, string, flags=0)
函数参数说明:pattern:匹配的正则表达;string:要匹配的字符串;flags:标志位,用于控制正则表达式的匹配方式

实例代码:

print(re.search('www', 'www.runoob.com').span())  # 在起始位置匹配
print(re.search('com', 'www.runoob.com').span())  # 不在起始位置匹配

结果为:

(0, 3)
(11, 14)

re.match与re.search的区别: re.match只匹配字符串的开始,如果字符串开始不符合正则表达式,则匹配失败,函数返回None;而re.search匹配 整个字符串 ,直到找到一个匹配。

(3)re.sub: Python 的 re 模块提供了re.sub用于替换字符串中的匹配项
函数语法:re.sub(pattern, repl, string, count=0, flags=0)
函数参数说明:pattern:正则中的模式字符串;repl:替换的字符串,也可为一个函数;string:要被查找替换的原始字符串;count:模式匹配后替换的最大次数,默认 0 表示替换所有的匹配。

实例代码:

 ##re.sub用于替换字符串中的匹配项。
import re
 phone = "2004-959-559 # 这是一个国外电话号码"

# 删除字符串中的 Python注释
 num = re.sub(r'#.*$', "", phone)
 print("电话号码是: ", num)

# 删除非数字(-)的字符串
num = re.sub(r'D', "", phone)
print("电话号码是 : ", num)

结果为:

 电话号码是:  2004-959-559 
 电话号码是 :  2004959559

(4)re.compile 函数: compile 函数用于编译正则表达式,生成一个正则表达式( Pattern )对象,供 match() 和 search() 这两个函数使用。
函数语法:re.compile(pattern[, flags])
函数参数说明:pattern: 一个字符串形式的正则表达式;flags:可选,表示匹配模式,比如忽略大小写,多行模式等。

(5)re.findall函数: 在字符串中找到正则表达式所匹配的所有子串,并返回一个列表,如果没有找到匹配的,则返回空列表。
注意: match 和 search 是匹配一次, findall 匹配所有
函数语法:findall(string[, pos[, endpos]])
函数参数说明:string:待匹配的字符串;pos:可选参数,指定字符串的起始位置,默认为 0;endpos:可选参数,指定字符串的结束位置,默认为字符串的长度。

实例代码:

## findall 匹配所有
 pattern = re.compile(r'd+')  # 查找数字
 result1 = pattern.findall('runoob 123 google 456')
 result2 = pattern.findall('run88oob123google456', 0, 10)
 print(result1)
 print(result2)

结果为:

['123', '456']
['88', '12']

(6)re.finditer函数: 和 findall 类似,在字符串中找到正则表达式所匹配的所有子串,并把它们作为一个迭代器返回。
函数语法:re.finditer(pattern, string, flags=0)
函数参数说明:pattern:匹配的正则表达式;string:要匹配的字符串;flags:标志位,用于控制正则表达式的匹配方式。

实例代码:

import re

it = re.finditer(r"d+","12a32bc43jf3") 
for match in it: 
print (match.group() )

输出结果:

12 
32 
43 
3

(7)re.split函数: split 方法按照能够匹配的子串将字符串分割后返回列表
函数语法:re.split(pattern, string[, maxsplit=0, flags=0])
函数参数说明:pattern:匹配的正则表达式;string:要匹配的字符串;maxsplit:分隔次数,maxsplit=1 分隔一次,默认为 0,不限制次数;flags:标志位,用于控制正则表达式的匹配方式。

代码实例:

##split分割
a = re.split('W+', 'runoob, runoob, runoob.')##W 匹配非字母数字及下划线
print(a)

输出结果:

['runoob', 'runoob', 'runoob', '']

7.http请求

HTTP和HTTPS分别是什么?

HTTP协议(超文本传输协议): 是一种发布和接收HTML页面的方法,其设计目的是保证客户机与服务器之间的通信,是客户机与服务器之间的请求-应答协议。

HTTPS: 简单讲就是HTTP的安全版,在HTTP下加入SSL层。

 

HTTP 的常用两种请求方法:get 和 post

get - 用于从服务器上获取数据;get产生一个TCP数据包;对于get方式的请求,浏览器会把http header和data一并发送出去,服务器响应200(返回数据);

post - 用于向服务器传送数据;post产生两个TCP数据包;对于post,浏览器先发送header,服务器响应100(continue),然后再发送data,服务器响应200(返回数据)。

 

http申请状态码:

状态代码由三位数字组成,第一个数字定义了响应的类别,且有五种可能取值。
  1xx:指示信息–表示请求已接收,继续处理。
  2xx:成功–表示请求已被成功接收、理解、接受。
  3xx:重定向–要完成请求必须进行更进一步的操作。
  4xx:客户端错误–请求有语法错误或请求无法实现。
  5xx:服务器端错误–服务器未能实现合法的请求。

常见状态代码、状态描述的说明如下。
  200 OK:客户端请求成功。
  400 Bad Request:客户端请求有语法错误,不能被服务器所理解。
  401 Unauthorized:请求未经授权,这个状态代码必须和WWW-Authenticate报头域一起使用。
  403 Forbidden:服务器收到请求,但是拒绝提供服务。
  404 Not Found:请求资源不存在,举个例子:输入了错误的URL。
  500 Internal Server Error:服务器发生不可预期的错误。
  503 Server Unavailable:服务器当前不能处理客户端的请求,一段时间后可能恢复正常。

 

HTTP首部字段

通用首部字段

请求首部字段

响应首部字段

实体首部字段

来源于博客:图解HTTP(六)—— HTTP请求头(首部)

 

最后

以上就是大胆钢铁侠为你收集整理的python基础打卡 第五次1.file的全部内容,希望文章能够帮你解决python基础打卡 第五次1.file所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(38)

评论列表共有 0 条评论

立即
投稿
返回
顶部