zoukankan      html  css  js  c++  java
  • Python笔记 —— 使用open打开和操作txt文件

    打开:有两种方式

    with open(r"data.txt", "r", encoding="utf-8") as f: 
    f = open(r"data.txt", "r", encoding="utf-8")
    f.close()

    1.使用with管理文件,可以在不需要使用时自动关闭文件。

    2.第一个参数是需要打开文件的位置,可以用相对路径或者绝对路径表示,如果文件与当前文件在同一级目录中,直接写文件名可以

    3.文件路径前的r表示禁用转义,即如果文件名中出现 符号,会被识别成普通字符而非转义符

    4.第二个参数"r"代表打开模式,打开模式有以下几种

    • "r"只读,该文件必须已存在。
    • "r+"可读可写。该文件必须已存在,写为追加在文件内容末尾
    • "rb":  表示以二进制方式读取文件。该文件必须已存在。
    • "w":  只写。打开即默认创建一个新文件,如果文件已存在,则覆盖写(即文件内原始数据会被新写入的数据清空覆盖)。
    • "w+"写读。打开创建新文件并写入数据,如果文件已存在,则覆盖写。
    • "wb":  表示以二进制写方式打开,只能写文件, 如果文件不存在,创建该文件;如果文件已存在,则覆盖写。
    • "a"追加写。若打开的是已有文件则直接对已有文件操作,若打开文件不存在则创建新文件,只能执行写(追加在后面),不能读。
    • "a+"追加读写。打开文件方式与写入方式和'a'一样,但是可以读。需注意的是你若刚用‘a+’打开一个文件,一般不能直接读取,因为此时光标已经是文件末尾,除非你把光标移动到初始位置或任意非末尾的位置。(可以用seek()方法解决这个问题)

    5.关键字参数encoding是可选参数,当文档中没有中文字符时可以不用写这个参数,当有中文字符时才需要写(这是因为Windows的默认编码格式是GBK,而python的默认编码格式是Unicode.utf-8)

    操作:主要有读和写两部分

    读取数据有两种常见情况,第一种是逐行读取,第二行是逐个数据读取

    逐行读取数据,以以下数据为例

    zhangsan   1535198308152190   F   69
    lisi       1535198106072191   F   91
    wangwu     1535198903072192   M   87
    xiaoming   1535198811022193   M   76
    xiaohong   1535198301262194   F   55

    处理方法如下:

    with open(r"data.txt", "r", encoding="utf-8") as f:
        for line in f:
            data = line.strip("
    ").split()
            print(data)
    '''
    输出:
    ['zhangsan', '1535198308152190', 'F', '69']
    ['lisi', '1535198106072191', 'F', '91']
    ['wangwu', '1535198903072192', 'M', '87']
    ['xiaoming', '1535198811022193', 'M', '76']
    ['xiaohong', '1535198301262194', 'F', '55']
    '''

    注意:1.逐行读取文件会把每一行最后的换行符也读取进字符串中,比如上文中for循环读取或者用f.getline()读取都会有这个问题,因此需要使用strip函数把头尾的换行符都去掉(实际上只有尾部有)

       2.对于以空格分隔数据的字符串,默认无参的split()函数可以做到以任意多个空格为分界分割字符串,并把空格全部删除。如果split()中传入一个字符串作为参数,则split函数会以这个字符串作为标准分割,但是并不会过滤掉分割符。举例如下:

       如果把第三行改成    data = line.strip(" ").split(“ ”)

         输出结果的第一行将会是 ['zhangsan', '', '', '1535198308152190', '', '', 'F', '', '', '69']  ,这时需要自己手动删除元素 “ ”

    最后,读取出来的全部都是字符串,需要手动转换成其他类型的值

    逐个数据读取

    with open(r"data.txt", "r", encoding="utf-8") as f:
        data = f.read().split()

    read可以把整个文件的内容都读取出来,read()中可以加一个参数int n,表示读取文件中的前n个字符,适用于文本中没有换行符的情况

  • 相关阅读:
    HeadFirst设计模式C++实现-AbstractFactory模式
    Head First设计模式C++实现Singleton模式
    系统程序员成长计划动态数组(三)(上)
    一种OPENSSL_Uplink(100F2010,05): no OPENSSL_Applink解决方法
    系统程序员成长计划动态数组(四)
    Head First设计模式C++实现Command模式
    EJB>事务管理服务 小强斋
    EJB>事务管理服务 小强斋
    EJB>实体继承 小强斋
    EJB>事务管理服务 小强斋
  • 原文地址:https://www.cnblogs.com/LC32/p/13258596.html
Copyright © 2011-2022 走看看