您的位置:首页 > 编程语言 > Python开发

Python从入门到放弃之基础篇(5)

2019-03-07 20:38 43 查看

文章目录

  • ③读写操作csv及excle文件
  • 2.os模块
  • 4.类和对象
  • 5.http请求
  • 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模块命令

    1. os.name——name顾名思义就是’名字’,这里的名字是指操作系统的名字,主要作用是判断目前正在使用的平台,并给出操作系统的名字,如Windows 返回 ‘nt’; Linux 返回’posix’。注意该命令不带括号。
    2. os.getcwd()——全称应该是’get current work directory’,获取当前工作的目录,如:返回结果为:‘C:\Program Files\Python36’。注意该命令带括号,除了第一个命令不带括号之外,以下命令基本都带括号。
    3. os.listdir(path)——列出path目录下所有的文件和目录名。Path参数可以省略。例:
      以列表的形式全部列举出来,其中没有区分目录和文件。
    4. os.remove(path)——删除path指定的文件,该参数不能省略。
    5. os.rmdir(path)——删除path指定的目录,该参数不能省略。
    6. os.mkdir(path)——创建path指定的目录,该参数不能省略。
      注意:这样只能建立一层,要想递归建立可用:os.makedirs()
    7. os.path.isfile(path)——判断指定对象是否为文件。是返回True,否则False
    8. os.path.isdir(path)——判断指定对象是否为目录。是True,否则False。例
    9. os.path.exists(path)——检验指定的对象是否存在。是True,否则False.例:
    10. os.path.split(path)——返回路径的目录和文件名,即将目录和文件名分开,而不是一个整体。此处只是把前后两部分分开而已。就是找最后一个’/’。
    11. os.system(cmd)——执行shell命令。返回值是脚本的退出状态码,0代表成功,1代表不成功,例:
    12. os.chdir(path)——'change dir’改变目录到指定目录
    13. os.path.getsize()——获得文件的大小,如果为目录,返回0
    14. os.path.abspath()——获得绝对路径。
    15. os.path.join(path, name)—连接目录和文件名,与os.path.split(path)相对。
      16.os.path.basename(path)——返回文件名
    16. os.path.dirname(path)——返回文件路径
      https://www.geek-share.com/detail/2726905548.html
      https://blog.csdn.net/xxlovesht/article/details/80913193

    3.datetime

    datetime模块常用的主要有下面这四个类:

    1. datetime.date: 是指年月日构成的日期(相当于日历)

    2. datetime.time: 是指时分秒微秒构成的一天24小时中的具体时间(相当于手表)

    3. datetime.datetime: 上面两个合在一起,既包含时间又包含日期

    4. datetime.timedelta: 时间间隔对象(timedelta)。一个时间点(datetime)加上一个时间间隔(timedelta)可以得到一个新的时间点(datetime)。

    5. 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请求

    https://www.geek-share.com/detail/2685902900.html

    内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
    标签: