zoukankan      html  css  js  c++  java
  • python基础4文件操作

    在磁盘上读取文件的 功能都是由操作系统来实现的,不允许普通的程序直接操作磁盘,所以读写文件就是请求操作系统打开一个文件对象(通常称为文件描述符),然后,通过操作系统提供的接口从这个文件对象中读取数据(读文件),或者把数据写入这个文件对象(写文件)。

    操作系统都有自己的编码,文件打开时如果你不指定编码方式就会默认使用操作系统的编码。win操作系统:GBK.。Mac/linux操作系统:utf-8.

     

    f=open("nihao","w",encoding="utf-8")
    f.write("你好我的做过")
    f.close

    打开文件方:1.两个文件在同一路径内,直接写名字。

          2.两个文件不在同一路径内。用写入文件的绝对路径,绝对路径不区分大小写,我试过。文件的路径需要用取消转译的方法表示。

    转义字符是一种特殊的字符常量。转义字符以反斜线""开头,后跟一个或几个字符。转义字符具有特定的含义,不同于字符原有的意义,故称“转义”字符。

    在Unix和Web用正斜杠/ 来表示路径的分割,

    在Windows中,路径分隔采用反斜 杠"",比如"C:WindowsSystem"。 

    但是在打开文件的方式中需要注意:因为open里的路径用引号包裹上,就形成了字符串,由于反斜杠在字符串中是转义字符的意思,会把后边的内容转义,所以我们要避免转义,让它表达它原来分割路径的意思,有三种方法可以取消转义:

    这里有三种方式:

    方式一:前边加r(不区分大小写)路径也不区分大小写。

    f=open(r"C:Users张守业Desktop111.txt","w",encoding="utf-8")
    f.write("你好我的做过")

    方式二:单斜杠变为双斜杠\

    f=open("c:\users\张守业\Desktop\aBC.txt","w",encoding="utf-8")
    f.write("")

    方法三:用正斜杠/来代替反斜杠/

    with open("C:/Users/张守业/Desktop/你.txt",encoding="Gbk") as f:
       print( f.read())

    文件写入:

    w: 写模式。不存在的文件会创建一个文件,再写入。如果有会清除原文件再写入。encoding的意思就是你写入的字符串需要转换成什么编码方式保存起来

    w+:写读模式。不存在的文件会创建一个文件,再写入。如果有会清除原文件再写入。写完后可以读取。注意f.read()时,前边一定要有一个f.seek(0),这样才能从头开始读取,否则读不出东西。因为对于read模式,指针在哪里,就从哪里开始读,write后,指针在文档最后,所以读不出东西。

    wb: 二进制写读模式:写入二进制文件。

    f=open("歌词","w+",encoding="utf-8")
    f.write("我是中国人")
    f.seek(0)  #一定要有这个
    print(f.read())
    f.close()

    a:追写模式:和w相同,他不会清除原文件,会在文档末尾继续接着写。

    a+:追写读模式。和w+相同,他不会清除原文件,会在文档末尾继续接着写。

    ab二进制追加模式。

    非文本文件读取:rb

    对于非文本文件(例如图片视频),我们只能使用b模式,"b"表示以字节的方式操作(而所有文件也都是以字节的形式存储的,使用这种模式无需考虑文本文件的字符编码、图片文件的jgp格式、视频文件的avi格式)

    rb 
    wb
    ab
    #注:以b方式打开时,因为要读取的二进制的文件,读取的内容即是字节类型(bytes),所以就不需要指定encode了.

    文件读取的第一种方法:f.read(). 一次性读取完。以r模式打开按字符读,以rb的模式打开按字节

    文件读取的第二种方法:f.readline().strip()逐行读取#strip删除空格,换行符,制表符。

    文件读取的第三种方法:f.readlines()返回一个列表,将文件的每一行作为列表的每一项返回一个列表。

    文件读取的第四种方法: for i in f  节省内存每一次只存一次,这个方法最常用。注意这个是逐行的读取,而不是一个个的字读。这个和单个字符串不一样,因为这是打开文件特别规定的。

    例子:(文件也是一个迭代器)

    with open("产品",encoding="utf-8") as f:
        for i in f:                    ###这里不是f=f.read(),然后再for i in f. 这样做是错误的。
            i=i.strip()
            print(i)

    r:读模式。

    r+ 读写模式。

    rb 二进制读模式

    seek() 方法用于移动文件读取指针到指定位置,光标移动到第几个字节。 f.seek(0)移动到开始,f.seek(0,2)移动到文件末尾。

    tell():告诉光标在第几个字节。

    truncate():从文件开始的位置,只保留指定字节的内容

    换行符是  2个字符位,如果是 就是一个字符位,但window会自动在 前加 空格就是1个字符位,

    文件的关闭:

    需要注意的是:文件读写操作完成后,应该及时关闭。一方面,文件对象会占用操作系统的资源;另外一方面,操作系统对同一时间能打开的文件描述符的数量是有限制的,如果不及时关闭文件,还可能会造成数据丢失。因为将数据写入文件时,操作系统不会立刻把数据写入磁盘,而是先把数据放到内存缓冲区异步写入磁盘。当调用close方法时,操作系统会保证把没有写入磁盘的数据全部写到磁盘上,否则可能会丢失数据。

    文件的关闭有两种方法:

    方法一:文件最后加入f.close( )

    方法二:用第一种方法关闭文件时比较麻烦,经常忘记写f.close(),为了避免这个问题,出现了一个新方法

    with open("产品","r",encoding="utf-8") as f :
         print  (f.read())   #这里就不需要加f.close( )

    文件的修改:

    python本身没有文件直接修改原文件功能,但是可以间接的的实现。

    主题思路:1.把原文件的内容存到一个变量中。

         2.把老词语替换成新词语

         3.创建一个新文件,把原文件的内容写到新文件中。

         4.把新文件的名字改成原文件的名字。

    方法一:

    with open("歌词","r",encoding="utf-8") as f:
        old_content=f.read()
        new_content=old_content.replace("我们","we")
        print(new_content)
        f.close()
    with open("歌词2","w",encoding="utf-8") as f2:
        f2.write(new_content)
        f.close()

    import os
    os.remove("歌词")
    os.rename("歌词2","歌词")
     

    方法二: 运用for 循环的方法

    with open("歌词","r",encoding="utf-8") as f,open("歌词2","w",encoding="utf-8") as f2:  注意文件变量不能是一样的
        for line in f:
            if line.strip():            #注意不要把每句话的换行符给去掉
                new_line=line.replace("我们","we")
                f2.write(new_line)
    import  os
    os.remove("歌词")
    os.rename("歌词2","歌词")

    题目:

    把(0,99)中偶数写入文档里,并竖行读取它。

    f=open("歌词","w+",encoding="utf-8")
    for i in range(0,100,2):
        i=str(i)
        f.write("{}
    ".format(i))
    f.seek(0)
    print(f.read())
  • 相关阅读:
    AJAX异步传输——以php文件传输为例
    js控制json生成菜单——自制菜单(一)
    vs2010中关于HTML控件与服务器控件分别和js函数混合使用的问题
    SQL数据库连接到服务器出错——无法连接到XXX
    PHP错误:Namespace declaration statement has to be the very first statement in the script
    【LeetCode】19. Remove Nth Node From End of List
    【LeetCode】14. Longest Common Prefix
    【LeetCode】38. Count and Say
    【LeetCode】242. Valid Anagram
    【LeetCode】387. First Unique Character in a String
  • 原文地址:https://www.cnblogs.com/sticker0726/p/7755871.html
Copyright © 2011-2022 走看看