Python 4 种不同的存取文件骚操作

方法预览

●Python 内置方法

●numpy 模块方法

●os 模块方法

●csv 模块方法

Python 内置方法

在不需要借助任何外界库的前提下,python 内置方法其实也可以完成我们需要的文件存取任务,这里主要介绍几种 python 内置方法的使用方式,最后再给出一个实际案例展示:
1.open()方法

file object = open(file_name [, access_mode][, buffering])

该方法意义在于按照指定模式打开文件,其中,各个参数的含义如下:

file_name: file_name 变量是一个包含了你要访问的文件名称的字符串值。

access_mode:access_mode 决定了打开文件的模式:只读,写入,追加等。所有可取值见如下的完全列表。这个参数是非强制的,默认文件访问模式为只读 (r)。常用文件访问模式见下图Python 4 种不同的存取文件骚操作

buffering: 如果 buffering 的值被设为 0,就不会有寄存。如果 buffering 的值取 1,访问文件时会寄存行。如果将 buffering 的值设为大于 1 的整数,表明了这就是的寄存区的缓冲大小。如果取负值,寄存区的缓冲大小则为系统默认
2.close()方法

fileObject.close()

File 对象的 close()方法刷新缓冲区里任何还没写入的信息,并关闭该文件,这之后便不能再进行写入。当一个文件对象的引用被重新指定给另一个文件时,Python 会关闭之前的文件。用 close()方法关闭文件是一个很好的习惯。
3.write ()方法

fileObject.write(string)

write()方法可将任何字符串写入一个打开的文件。需要重点注意的是,Python 字符串可以是二进制数据,而不是仅仅是文字。write() 方法不会在字符串的结尾添加换行符 (‘\n’);被传递的参数是要写入到已打开文件的内容。
**4.read () 方法 **

fileObject.read([count])

read()方法从一个打开的文件中读取一个字符串。需要重点注意的是,Python 字符串可以是二进制数据,而不是仅仅是文字。被传递的参数是要从已打开文件中读取的字节计数。该方法从文件的开头开始读入,如果没有传入 count,它会尝试尽可能多地读取更多的内容,很可能是直到文件的末尾。
5. 举例分析
一般情况,建议小伙伴们使用 with …as…写法,这种会在执行完代码块后自动 close,既可以简化程序,又可以避免自己粗心或者其他原因造成的不必要错误,下面给出一个实际案例。

#先用open方法打开(不存在则创建)一个文件,
#write方法写入内容,这里with写法不用手动close
#注意这里是模式‘a',意味着写入内容不覆盖已有内容
with open('test.txt','a') as file_test:
    file_test.write('无良老马!\n')
    file_test.write('毁我青春!\n')  

#注意利用read方法读取内容,模式要设置为可读模式
#read()方法不带参数,表示默认读取最长内容
with open('test.txt','r') as file_test:
    str = file_test.read()
    print(str)

输出结果会在目录下多出一个 test.txt 文件,并读取后输出所有内容

无良老马!
毁我青春!

numpy 模块方法

这里主要介绍 numpy 模块中的两个常用方法,用于保存读取数据.

np.loadtxt(filename, dtype=int, delimiter=' ')
np.savetxt(filename, a, fmt="%d", delimiter=",")

其中,filename 为要保存或读取的文件名,a 为存取的内容,delimiter 为分隔符号。这个使用很简单,代码如下:

import numpy as np

a=np.arange(0,10,0.5).reshape(4,-1)
#改为保存为整数,以逗号分隔
np.savetxt("a.txt",a,fmt="%d",delimiter=",")
#load时也要指定为逗号分隔
b = np.loadtxt("a.txt",delimiter=",")
print('b=\n',b)

其运行结果,创建了一个名为’a.txt‘ 的文件,保存了数组,并 print 打印出来读取结果,如下:

b=
 [[ 0.  0.  1.  1.  2.]
 [ 2.  3.  3.  4.  4.]
 [ 5.  5.  6.  6.  7.]
 [ 7.  8.  8.  9.  9.]]

os 模块方法

python 中的 os 模块很强大,提供了许多文件处理操作的方法。以下列举出常用的几种方法.
1.os.open()

os.open(file, flags[, mode]);
  1. 其中,参数含义为:

    file – 要打开的文件

    flags – 该参数可以是以下选项,多个使用 “|” 隔开:

      a.  **os.O_RDONLY:** 以只读的方式打开
    
      b.  **os.O_WRONLY:** 以只写的方式打开
    
      c.  **os.O_RDWR :** 以读写的方式打开
    
      d.  **os.O_NONBLOCK:** 打开时不阻塞
    
      e.  **os.O_APPEND:** 以追加的方式打开
    
      f.  **os.O_CREAT:** 创建并打开一个新文件
    
      g.  **os.O_TRUNC:** 打开一个文件并截断它的长度为零(必须有写权限)
    
      h.  **os.O_EXCL:** 如果指定的文件存在,返回错误
    
      i.  **os.O_SHLOCK:** 自动获取共享锁
    
      j.  **os.O_EXLOCK:** 自动获取独立锁
    
      k.  **os.O_DIRECT:** 消除或减少缓存效果
    
      l.  **os.O_FSYNC :** 同步写入
    
      m.  **os.O_NOFOLLOW:** 不追踪软链接
    
  2. **
    os.rename(current_name,new_name)** 方法用于更改文件名称
  3. **os.remove(filename)** 方法用于删除指定文件


  4. **os.mkdir(‘newdir’)** 方法用于创建单层目录,如果该目录已存在会抛出异常


  5. **os.chdir(‘newdir’)** 方法用于改变当前工作目录


  6. **os.getcwd()** 方法获取当前工作目录


  7. **os.write(fd,str)** 向指定文件写入内容,注意 str 要转换成 byte

这里注意针对内容的写入举例,注意 str 要转换成 byte,否则会报错(a bytes-like object is required, not ‘str’)!

import os
# # 打开文件
fd = os.open("f1.txt",os.O_RDWR|os.O_CREAT)
# # 写入字符串
line = "this is luwejun"
b = str.encode(line)
os.write(fd,b)
# #直接写str报错:a bytes-like object is required, not ‘str’
os.close(fd)
#以可读模式打开
fd = os.open("f1.txt",os.O_RDWR)
ret = os.read(fd,16)
print(ret)
os.close(fd)
print('finish close')
# os.remove('f1.txt')

csv 模块方法

和前几种方法一样,主要是读取和写入两个部分。主要依靠 csv.reader(),csv.writer() 和 writerow() 方法。和前边几种大同小异,这里直接代码中讲解基础的使用方式。

import csv

with open('l.csv', 'w',newline='') as csvfile:
    #csv.writer()方法创建
    eWriter = csv.writer(csvfile)
    #用writerow()方法逐行写入
    eWriter.writerow(['ID', '名字', '粉丝数量'])
    eWriter.writerow(['xiao','python',15000])
    eWriter.writerow(['xiao','python',15000])
    eWriter.writerow(['xiao','python',15000])

#打开文件,用with打开可以不用去特意关闭file了,python3不支持file()打开文件,只能用open()
with open('l.csv','r') as csvfile:
    #读取csv文件,返回的是迭代类型
    read = csv.reader(csvfile)
    for i in read:
        print(i)

## 以上就是本次整理的内容了