zoukankan      html  css  js  c++  java
  • python中常用的文件和目录操作(一)

    常用的文件操作

    1. 打开文件

    • open,它是一个内置函数,可以直接调用
    • 语法:file object = open(file_name, [access_mode]),这里我们会创建一个file对象
    • 参数:file_name--要访问的文件名称的字符串值,access_mode--决定了打开文件的模式:只读、写入、追加等。这个参数是非强制的,默认文件访问模式为只读(r)
    • 返回值:返回一个文件对象
    模 式 解释
    以只读方式打开文件。文件的指针将会放在文件的开头。这是默认模式
    r+ 打开一个文件用于读写。文件指针将会放在文件的开头
    w 打开一个文件只用于写入。如果该文件已存在则将其覆盖。如果不存在,则创建新文件
    w+ 打开一个文件用于读写。如果该文件已存在则将其覆盖。如果不存在,则创建新文件
    a 打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的末尾。也就是说,新的内容将会被写入已有内容之后。如果该文件不存在,则创建新文件进行写入
    a+ 打开一个文件用于写入。如果文件已存在,文件指针将会放在文件的末尾。文件打开时会是追加模式。如果文件不存在,则创建新文件用于读写

    2. 关闭文件: file_object.close()

    3. 文件的读写操作

    read()方法:

    • read(size=-1)方法从一个打开的文件中读取一个字符串
    • 参数: size--传递你要读取的字节数,如果不传递,默认是-1,读取所有的数据,
    • 读完了之后。指针会定位到读完之后的位置
    • 返回值: size=0,返回b"",size<0,返回读取的所有的字节数,size>0,返回指定的字节数

    readline()方法:

    • 从文件读取整行,包括" "字符
    • 参数:size--如果传递一个非负的参数,返回指定大小的字节数
    • 返回值:返回从字符串中读取的字节

    readlines()方法:

    • 读取所有的行并返回字符串列表,如果碰到EOF则返回空字符串
    • 参数:无
    • 返回值:返回所有的字符串列表

    write()方法:

    • write()方法可将任何一个字符串写入一个打开的文件
    • 注意:write()方法不会在字符串的结尾添加换行符(" "),所以无法实现自动换行。需要自己手动添加" "来实现换行

    writelines()方法:

    • 传入你要写的列表内容,就可以写入多行

    4. 示例

    假设在pycharm的工作目录下新建了一个test.txt的文本文件,由于包含中文,我们保存时设置编码为"utf-8"。文件内容如下:

    name: Peter
    age: 29
    height: 175
    weight: 70
    country: 英国
    hobby: play-guitar

    读的方法

    #open()和read()方法
    
    fo = open("test.txt")
    
    content = fo.read()
    print(content)
    
    结果:
    锘縩ame: Peter
    age: 29
    height: 175
    weight: 70
    country: 鑻卞浗
    hobby: play-guitar
    
    乱码了,我们可以这样解决:
    
    fo = open("test.txt", encoding="utf-8")
    
    content = fo.read()
    print(content)
    
    结果:
    name: Peter
    age: 29
    height: 175
    weight: 70
    country: 英国
    hobby: play-guitar
    
    #readlines()方法
    fo = open("test.txt", encoding="utf-8")
    
    lines = fo.readlines()
    print(lines)
    
    ['ufeffname: Peter
    ', 'age: 29
    ', 'height: 175
    ', 'weight: 70
    ', 'country: 英国
    ', 'hobby: play-guitar
    ', '
    ']

    写的方法

    write()方法:如果文件已存在,会覆盖

    #write()方法
    
    fo = open("test.txt", "w")
    
    fo.write("city: London")

    fo.close() 我们打开test.txt文件会发现,文件只剩下: city: London

    注意:在同一个w模式下,两次写入时,第一次写入会已经存在的内容,第二次写入不会覆盖第一次写入的内容(可以理解为指针移了)

    fo = open("test.txt", "w", encoding="utf-8")
    
    fo.write("第一次写入会覆盖已经存在的内容,")
    fo.write("第二次写入不会覆盖第一次写入的内容")
    fo.close() 结果: 第一次写入会覆盖已经存在的内容,第二次写入不会覆盖第一次写入的内容

    write()无法实现自动换行,需要手动添加" "来实现换行

    fo = open("test.txt", "w", encoding="utf-8")
    
    fo.write("第一次写入会覆盖已经存在的内容,
    ")
    fo.write("第二次写入不会覆盖第一次写入的内容")
    
    fo.close()
    
    结果:
    
    第一次写入会覆盖已经存在的内容,
    第二次写入不会覆盖第一次写入的内容

    writelines()传递列表来写入多行,不会自动换行,需手动添加

    fo = open("test.txt", "w", encoding="utf-8")
    
    fo.write("第一次写入会覆盖已经存在的内容,
    ")
    fo.write("第二次写入不会覆盖第一次写入的内容
    ")
    fo.writelines(["111111
    ", "222222
    "])
    
    fo.close()
    
    结果
    
    第一次写入会覆盖已经存在的内容,
    第二次写入不会覆盖第一次写入的内容
    111111
    222222

    追加的方法

    fo = open("test.txt", "a", encoding="utf-8")
    fo.write("哈哈哈哈哈哈")
    
    fo.close()
    
    结果:
    
    第一次写入会覆盖已经存在的内容,
    第二次写入不会覆盖第一次写入的内容
    111111
    222222
    哈哈哈哈哈哈

    5. 文件定位

    tell()和seek()方法详见:【译】:文件对象的方法

  • 相关阅读:
    ZJU 1610
    zju1484
    字符串赋值与初始化
    内核线程、内核级线程(轻量级进程)和用户级线程
    Mysql基础
    结构体的sizeof
    对象属性值读取问题
    返回引用类型
    操作符重载为成员函数、非成员函数与友元函数的区别
    运算符优先级
  • 原文地址:https://www.cnblogs.com/my_captain/p/8975964.html
Copyright © 2011-2022 走看看