Python学习之路-----文件

        文件存在的意义:使得数据持久化。当程序在运行的时候,所有的数据都是在内存上的,程序一结束内存的数据就会消失。文件是存储在硬盘上的,硬盘上的数据是可以长时间保存的,因此想要保存数据就要进行文件操作。归根究底,文件只有两个操作:读、写。

        在window下,文件分为很多不同的格式而且默认以后缀来区分,之所以要分成各种不同的文件是为了方便对种类不同文件进行操作。

基本操作步骤

第一种

  • 打开文件,打开的同时指定打开方式。
  • 操作文件;
  • 关闭文件

f = open("test.txt","w")
f.write("hello Python!")
f.close()

  以上代码执行后会在当前程序所在的目录下生成一个test.txt文件,文件的内容是:hello Python!。

   代码中open()函数的第一个参数是文件名,第二个参数是打开的模式,r代表读,w代表写。以r方式打开的文件不能进行w操作,以w方式打开的文件不能进行r操作。open()函数返回一个文件对象,通过这个文件对象来进行文件的操作。操作完文件后使用close()方法关闭文件。

第二种

   使用with.......as关键字,这种方式不用担心没有关闭文件的问题。

with open("test2.txt","w") as f2:
    f2.write("123456")

如果文件是以w方式打开并且文件已经存在,文件的原由内容会被覆盖。


路径问题

    在操作系统中为了标识某一个文件所在的位置,提出了文件路径可以表示为绝对路径和相对路径两种形式。

绝对路径:

    在window系统中,如果一个路径是以盘符开始表示的那就是一个绝对路径,如:C:\Users\me\Desktop。需要注意的是“\”是反斜杠,在实际的代码编程中有特殊的意义,因此在代码中出现绝对路径需要使用转义字符

相对路径:

    相对路径多在代码中使用,试想如果你自己在代码中以绝对路径打开一个文件,而这个绝对路径在另一个人的电脑上却没有,那么程序便不能正常运行。因此在实际的开发过程中使用相对路径。

    相对路径是相对于程序当时所在的路径为基准,表示当前路径的话可以使用.  ,当前路径的上一级可以使用  ../  。

    上面程序中已经创建了test.txt文件,现在来以相对路径的方式读出文件内容。

f = open("./test.txt","r")
read_result = f.read()
print(read_result)
f.close()

文件操作模式

open()函数的第二个参数,模式还有其他写法,一起看一下

模式     说明
r 以只读方式打开文件。文件的指针将会放在文件的开头。这是默认模式。
w 打开一个文件只用于写入。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。
a 打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。
rb 以二进制格式打开一个文件用于只读。文件指针将会放在文件的开头。这是默认模式。
wb 以二进制格式打开一个文件只用于写入。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。
ab 以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。
r+ 打开一个文件用于读写。文件指针将会放在文件的开头。
w+ 打开一个文件用于读写。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。
a+
打开一个文件用于读写。如果该文件已存在,文件指针将会放在文件的结尾。文件打开时会是追加模式。如果该文件不存在,创建新文件用于读写
rb+ 以二进制格式打开一个文件用于读写。文件指针将会放在文件的开头。
wb+ 以二进制格式打开一个文件用于读写。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。
ab+ 以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。如果该文件不存在,创建新文件用于读写。


文件read

read():读取文件全部内容到内存。当文件比较大的时候,可能会导致程序出现问题。

with open("test.txt","r") as f:
    content = f.read()
    print(content)

read(字符数):读取指定数量的字符数到内存。

with open("test.txt","r") as f:
    content = f.read(10)
    print(content)

readlines():同样是读取全部内容到内存,但是返回的是一个列表,列表中的每一个元素就是一行数据

with open("test.txt","r") as f:
     content = f.readlines()
     print(content)

当读取大文件的时候要结合while()循环并使用read(字符数)或者readline(),当文件读到末尾的时候退出循环。

with open("test.txt","r") as f:

    while True:
        content = f.readline()
        if len( content) == 0:
            break
        print("%s" % content,end="")


文件定位

    在操作文件(读、写)的时候会有文件指针存在,当打开的文件的时候文件指针是指向文件开头的,每次读取之后文件指针就会往后移动相应的字符数。看下面的例子:

with open("test.txt","w+") as f:
    f.write("hello world!")
    content = f.read()
    print(content)

运行后会发现并没有输出任何值,因为当你read的时候文件指针已经位于文件的末尾了,从末尾开始读肯定读不到任何数据。

tell():获得文件当前的偏移

seek(offset,whence):在whence的基础上偏移offset个字符,whence有三种取值:0,1,2。0表示文件开头,1表示文件的当前指针的位置,2表示文件末尾。在Python3中只能相对与文件的开头进行偏移。

在上面的例子中,文件指针已经到了文件末尾,如果想读出文件的内容需要将文件指针移动到文件开头。

with open("test.txt","w+") as f:
    f.write("hello world!")
    current = f.tell()
    print("current:",current)
    f.seek(0,0)
    content = f.read()
    print(content)

猜你喜欢

转载自blog.csdn.net/shen_chengfeng/article/details/80722607