zoukankan      html  css  js  c++  java
  • python-文件操作(1)

    本文内容涉及python打开/创建文件对象,文件的读写、文件指针位置的移动、获取命令行参数。

    1. open()
    open函数以指定模式返回一个file对象,如: file_object = open(filename,access_mode=’r’,buffering=-1),默认是以r模式打开文件。

    filename:表示要打开文件名(字符串),可以是绝对路径或相对路径
    access_mode:文件打开的模式(字符串), 常用的模式有’r’,’w’,’a’,不是很常用的还有’u’和’b’
    ‘r’模式:以读方式打开,不能进行写操作,文件必须是已经存在的
    ‘r+’模式:以读写方式打开,文件必须是已经存在的
    ‘w’模式:以写方式打开,不能进行读操作,若文件存在,则先清空,然后重新创建;若不存在,则创建文件
    ‘w+’模式:以读写方式打开,若文件存在,则先清空,然后重新创建;若不存在,则创建文件
    ‘a’模式:以追加方式打开,不能进行读操作,把数据追加到文件的末尾;若不存在,则创建文件
    ‘a+’模式:以读写方式打开,把数据追加到文件的末尾;若不存在,则创建文件
    ‘b’模式:以二进制模式打开,不能作为第一个字符出现,需跟以上模式组合使用,如’rb’,’rb+’等,
    ‘u’模式:表示通用换行符支持,文件必须是已经存在的

    buffering:表示访问文件采用的缓冲方式,0表示不缓冲,1表示缓冲一行数据,其他大于1的值表示使用给定值作为缓冲区大小,负数表示使用系统默认缓冲机制,默认是-1,一般使用系统默认方式。

    2. file()
    file是一个类,file()以指定模式创建一个file对象,跟open()具有相同的功能,可以任意替换。一般使用open来创建一个file对象,使用isinstance(obj,file)来判断obj是否是一个文件对象。

    3.read()、readline()、readlines()
    read():读取指定数目个字节到字符串中,负数将读取至文件末尾,默认是-1

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    >>> file_obj = open('test.txt','r')
    >>> file_obj.read()
    'dfdff '
    >>> file_obj.seek(0)
    >>> file_obj.read(0)
    ''
    >>> file_obj.read(1)
    'd'
    >>> file_obj.read(2)
    'fd'
    >>> file_obj.read(-1)
    'ff '
    >>> file_obj.seek(0)
    >>> file_obj.read(1000)
    'dfdff '
    >>> file_obj.seek(0)
    >>> file_obj.read(-5)
    'dfdff '

    readline():读取文件的一行,包括行结束符,可以制定size参数的值,默认是-1

    1
    2
    3
    4
    5
    6
    7
    >>> file_obj = open('test.txt','r')
    >>> file_obj.readline()
    'dfdff '
    >>> file_obj.readline(2)
    'al'
    >>> file_obj.readline(-1)
    'exzhou '

    readlines():读取所有剩余的行,然后作为一个字符串列表返回

    1
    2
    3
    >>> file_obj.seek(0)
    >>> file_obj.readlines()
    ['dfdff ', 'alexzhou ', 'zhoujianghai ']

    4. write()、writelines()
    ps:这两个方法都不会自动加上行结束符,需在写入数据前自己加上

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    >>> file_obj = open('test.txt','w+')
    >>> file_obj.write('alexzhou')
    >>> file_obj.write(' python')
    >>> file_obj.seek(0)
    >>> file_obj.readline()
    'alexzhou python'
     
    >>> l = ['my','name','is','zhoujianghai']
    >>> l = ' '.join(l)
    >>> file_obj.writelines(l)
    >>> file_obj.seek(0)
    >>> file_obj.readline()
    'alexzhou pythonmy name is zhoujianghai'
     
    >>> file_obj.write('hello ')
    >>> file_obj.write('world ')
    >>> file_obj.seek(0)
    >>> file_obj.readline()
    'alexzhou pythonmy name is zhoujianghaihello '
    >>> file_obj.readline()
    'world '

    5. seek()、tell()
    seek():移动文件指针到不同的位置,可以指定偏移量和起始位置。起始位置0表示从文件头开始,1表示从当前位置开始,2表示从文件尾开始,默认是0.
    tell():表示当前文件指针在文件中的位置,从文件头算起。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    >>> file_obj.seek(0)
    >>> file_obj.tell()
    0
    >>> file_obj.seek(5)
    >>> file_obj.tell()
    5
     
    >>> file_obj.seek(5,1)
    >>> file_obj.tell()
    10
    >>> file_obj.seek(5,2)
    >>> file_obj.tell()
    57
    >>> file_obj.seek(5,0)
    >>> file_obj.tell()
    5

    6. 文件迭代和关闭文件
    可以使用for循环一行一行读取文件

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    >>> file_obj = open('test.txt','w+')
    >>> file_obj.write('hello ')
    >>> file_obj.write('world ')
    >>> file_obj.seek(0)
    >>> for eachline in file_obj:
    ...     print eachline,
    ...
    hello
    world
    >>> file_obj.close()

    ps:print后面加一个分号的作用:避免print语句默认在打印的内容后面加一个换行符号。

    7. os模块常用属性
    由于各操作系统的行分隔符和文件分隔符不一样,所以可以使用os模块的以下属性避免代码移植时碰到这些问题。

    os.linesep 行分隔符字符串
    os.sep 文件分隔符字符串
    os.pathsep 路径分隔符字符串
    os.curdir 当前目录字符串
    os.pardir 父目录字符串

    看下面的打印结果

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    >>> import os
    >>> os.sep
    '/'
    >>> os.linesep
    ' '
    >>> os.pathsep
    ':'
    >>> os.curdir
    '.'
    >>> os.pardir
    '..'

    8. 获取命令行参数
    创建argv.py文件,输入下面代码

    1
    2
    3
    4
    import sys
     
    commands = sys.argv
    print commands

    执行:pyton argv.py 123,打印结果:
    [‘argv.py’, ‘123’]






  • 相关阅读:
    BZOJ2140: 稳定婚姻(tarjan解决稳定婚姻问题)
    BZOJ2124: 等差子序列(树状数组&hash -> bitset 求是否存在长度为3的等差数列)
    HDU 1217 Arbitrage(Bellman-Ford判断负环+Floyd)
    HDU 2112 Today(Dijkstra+map)
    HDU 2066 一个人的旅行(dijkstra水题+判重边)
    POJ 1511 Invitation Cards(Dijkstra(优先队列)+SPFA(邻接表优化))
    HDU 2544 最短路(floyd+bellman-ford+spfa+dijkstra队列优化)
    POJ 2431 Expedition (贪心 + 优先队列)
    POJ 3253 Fence Repair(哈夫曼编码)
    优先队列的使用(转)
  • 原文地址:https://www.cnblogs.com/pangguoping/p/5573965.html
Copyright © 2011-2022 走看看