Datawhale学习计划:python基础第六期-任务5

1.file

a.打开文件方式(读写两种方式)
1)读文件
要以读文件的模式打开一个文件对象,使用Python内置的open()函数,传入文件名和标示符:

f = open( '/Users/Esther/test.txt', 'r' )

如果文件不存在,open()函数会显示错误:

Traceback (most recent call last):
  File "C:/Users/qw/.PyCharmCE2018.2/config/scratches/scratch.py", line 1, in <module>
    f = open( '/Users/Esther/test.txt', 'r' )
FileNotFoundError: [Errno 2] No such file or directory: '/Users/Esther/test.txt'

若文件打开成功,调用read()方法可以一次读取文件的全部内容,Python把内容读到内存,用一个str对象表示:

f = open( 'C:\python/test.txt', 'r' )
print(f.read())

最后,调用close()方法关闭文件。文件使用完毕后必须关闭,因为文件对象会占用操作系统的资源,并且操作系统同一时间能打开的文件数量也是有限的:

f.close()

由于文件读写时都有可能产生IOError,一旦出错,后面的f.close()就不会调用。所以,为了保证无论是否出错都能正确地关闭文件,我们可以使用try … finally来实现:

try:
    f = open( 'C:\python/test.txt', 'r' )
    print(f.read())
finally:
    if f:
        f.close()

由于每次都这么写太繁琐,所以,Python引入了with语句来自动帮我们调用close()方法:

with open( 'C:\python/test.txt', 'r' ) as f:
     print(f.read())

f.read() 读取全部文件内容,为保险起见,可以反复调用read(size)方法,每次最多读取size个字节的内容。调用readline()可以每次读取一行内容,调用readlines()一次读取所有内容并按行返回list。

2)写文件
传入标识符’w’或者’wb’表示写文本文件或写二进制文件:

with open( 'C:\python/test.txt', 'w' ) as f:
     f.write('hello')

b.文件对象的操作方法
r: 以只读方式打开文件。文件的指针将会放在文件的开头。这是默认模式。
w:打开一个文件只用于写入。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。
a: 打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。
r+: 打开一个文件用于读写。文件指针将会放在文件的开头。
w+:打开一个文件用于读写。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。
a+:打开一个文件用于读写。如果该文件已存在,文件指针将会放在文件的结尾。文件打开时会是追加模式。如果该文件不存在,创建新文件用于读写。

详细:https://blog.csdn.net/chenmozhe22/article/details/81434549

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

  1. 读写Excel文件:
import xlrd,xlwt  #xlwt只能写入xls文件

#读取xlsx文件内容
rows = []   #create an empty list to store rows
book = xlrd.open_workbook('C:\python/testdata.xlsx')  #open the Excel spreadsheet as workbook
sheet = book.sheet_by_index(0)    #get the first sheet
for user in range(1, sheet.nrows):  #iterate 1 to maxrows
    rows.append(list(sheet.row_values(user, 0, sheet.ncols)))  #iterate through the sheet and get data from rows in list
print(rows)

#写入xls文件
rows1 = [['Name', 'Age'],['Lexy', '26'],['May', '25']]
book1 = xlwt.Workbook()   #create new book1 excle
sheet1 = book1.add_sheet('user')   #create new sheet
for i in range(0, 3):
    for j in range(0, len(rows1[i])):
        sheet1.write(i, j, rows1[i][j])
book1.save('C:\python/testdata.xlsx')   #sava as testdata1.xls
  1. 读写csv文件
import csv

#读取csv文件内容方法1
csv_file = csv.reader(open('C:\python/testdata.csv','r'))
next(csv_file, None)    #skip the headers
for user in csv_file:
    print(user)

#读取csv文件内容方法2
with open('C:\python/testdata.csv', 'r') as csv_file:
    reader = csv.reader(csv_file)
    next(csv_file, None)
    for user in reader:
        print(user)

#从字典写入csv文件
dic = {'Cathy':25, 'May':26}
csv_file = open('C:\python/testdata1.csv', 'w', newline='')
writer = csv.writer(csv_file)
for key in dic:
    writer.writerow([key, dic[key]])
csv_file.close()   #close CSV file
csv_file1 = csv.reader(open('C:\python/testdata1.csv','r'))
for user in csv_file1:
    print(user)

参考:https://www.cnblogs.com/cnkemi/p/8671493.html

2.os模块

Python os模块包含普遍的操作系统功能,与平台无关。
常用操作:

  1. os.name:输出字符串指示正在使用的平台。window 用’nt’表示
  2. os.getcwd():函数得到当前工作目录,即当前Python脚本工作的目录路径
  3. os.listdir():返回指定目录下的所有文件和目录名
  4. os.remove():删除一个文件
  5. os.system():运行shell命令
  6. os.sep:可以取代操作系统特定的路径分割符
  7. os.linesep:字符串给出当前平台使用的行终止符
  8. os.path.split():函数返回一个路径的目录名和文件名
  9. os.path.isfile()和os.path.isdir():函数分别检验给出的路径是一个文件还是目录
  10. os.path.exists():函数用来检验给出的路径是否真的存在
  11. os.path.abspath(name):获得绝对路径
  12. os.path.normpath(path):规范path字符串形式
  13. os.path.getsize(name):获得文件大小,如果name是目录返回0L,如果那么为文件,则返回文件的字节数
  14. os.path.splitext():分离文件名与扩展名
  15. os.path.join(path,name):连接目录与文件名或目录
  16. os.path.basename(path):返回文件名
  17. os.path.dirname(path):返回文件路径

详细:http://funhacks.net/explore-python/File-Directory/os.html

3.datetime模块

python中的datetime模块提供了操作日期和时间功能, 该模块提供了五种核心对象:datetime(时间日期类型), date(日期类型), time(时间类型), tzinfo(时区类型), timedelta(时间差类型)。
1)datetime和date
datetime对象可以用来表示精确的日期和时间,在实例化datetime对象时,year, month, day是必填项,hour, minute, second, microsecond(微秒), tzinfo(时区)是可选项。
date对象和datetime对象的区别在于,date对象只能表示日期,不能表示时间(即其精确度为天)。date实例化时须要且仅须要三个参数:year, month, day。date对象是没有时区(tzinfo)属性的。
例如:

from datetime import datetime
from datetime import date
a = datetime(year=1996,month=12,day=12)
b = date(year=1996,month=12,day=12)
print(a)
print(b)
print(a.month)

运行结果如下:

1996-12-12 00:00:00
1996-12-12
12

2)time和timedelta
time对象只能用来表示时间,而不能用来表示日期。time对象所表示的时间可以精确到微秒,而且可以具有时区(tzinfo)属性。timedelta对象表示一个时间段,timedelta对象可以通过手动实例化得到,也可以通过上述三个对象(datetime, date, time)相减得到。手动实例化timedelta时,可以传入的参数有:days, seconds, microseconds, milliseconds, minutes, hours, weeks。
例如:

from datetime import time
from datetime import datetime,timedelta
a = time(hour=20,minute=46,second=37)
x = datetime(year=2016,month=7,day=4,hour=21)
y = datetime(year=2019,month=2,day=19,hour=13)
delta=y-x
print(a)
print(delta)

运行结果如下:

20:46:37
959 days, 16:00:00

参考:https://www.jianshu.com/p/1957c4cab0a3
python中时间日期格式化符号:https://blog.csdn.net/cmzsteven/article/details/64906245

4.类和对象

面向对象最重要的概念就是类(Class)和实例(Instance),必须牢记类是抽象的模板,比如Student类,而实例是根据类创建出来的一个个具体的“对象”,每个对象都拥有相同的方法,但各自的数据可能不同。
定义类是通过class关键字,后面紧接着是类名,类名通常是大写开头的单词,紧接着是(object),表示该类是从哪个类继承下来的,通常,如果没有合适的继承类,就使用object类,这是所有类最终都会继承的类。
创建实例是通过类名+()实现的:

class Student(object):
    pass
bart = Student()
print(bart)

运行结果如下:

<__main__.Student object at 0x0000023768FEF940>

5.正则表达式

正则表达式是一种用来匹配字符串的强有力的武器。它的设计思想是用一种描述性的语言来给字符串定义一个规则,凡是符合规则的字符串,我们就认为它“匹配”了,否则,该字符串就是不合法的。
所以我们判断一个字符串是否是合法的Email的方法是:

  • 创建一个匹配Email的正则表达式;
  • 用该正则表达式去匹配用户的输入来判断是否合法。

Datawhale学习计划:python基础第六期-任务5
Datawhale学习计划:python基础第六期-任务5
Datawhale学习计划:python基础第六期-任务5

6.re模块

Python 的 re 模块(Regular Expression 正则表达式)提供各种正则表达式的匹配操作,使用这一内嵌于 Python 的语言工具,尽管不能满足所有复杂的匹配情况,但足够在绝大多数情况下能够有效地实现对复杂字符串的分析并提取出相关信息。Python 会将正则表达式转化为字节码,利用 C 语言的匹配引擎进行深度优先的匹配。

7.http请求

在Web应用中,服务器把网页传给浏览器,实际上就是把网页的HTML代码发送给浏览器,让浏览器显示出来。而浏览器和服务器之间的传输协议是HTTP,所以:

  • HTML是一种用来定义网页的文本,会HTML,就可以编写网页;
  • HTTP是在网络上传输HTML的协议,用于浏览器和服务器的通信。