1、打开和关闭文件(文件对象的方法open,close)

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

各个参数的细节如下:

  • file_name:file_name变量是一个包含了你要访问的文件名称的字符串值。
  • access_mode:access_mode决定了打开文件的模式:只读,写入,追加等。所有可取值见如下的完全列表。这个参数是非强制的,默认文件访问模式为只读(r)。
  • buffering:如果buffering的值被设为0,就不会有寄存。如果buffering的值取1,访问文件时会寄存行。如果将buffering的值设为大于1的整数,表明了这就是的寄存区的缓冲大小。如果取负值,寄存区的缓冲大小则为系统默认。

close()方法

File 对象的 close()方法刷新缓冲区里任何还没写入的信息,并关闭该文件,这之后便不能再进行写入。

当一个文件对象的引用被重新指定给另一个文件时,Python 会关闭之前的文件。用 close()方法关闭文件是一个很好的习惯。

语法:

fileObject.close()

====================================================

2、读取和写入文件(文件对象的方法)

operation details
f.read(size=-1) 读入全部内容,如果给出参数,读入前size长度
f.readline(size=-1) 读入一行内容,如果给出参数,读入该行前size长度
f.readlines(hint=-1) 读入文件所有行,以每行为元素形成列表,如果给出参数,读入前hint行
f.write(s) 向文件写入一个字符串或字节流
f.writelines(lines) 将一个元素全为字符串的列表写入文件
f.seek(offset) 改变当前文件操作指针的位置,offset含义如下:0 – 文件开头; 1 – 当前位置; 2 – 文件结尾

====================================================

3、重命名和删除文件(不是文件对象的方法)

Python os模块提供用于执行文件处理操作(如重命名和删除文件)的方法。

要使用此模块,需要先将它导入,然后可以调用任何相关的函数。

rename()方法

rename()方法有两个参数,即当前的文件名和新的文件名。

语法

os.rename(current_file_name, new_file_name)
Python

示例

以下是一个将现有文件test1.txt重命名为test2.txt的示例 -

#!/usr/bin/python3
import os # Rename a file from test1.txt to test2.txt
os.rename( "test1.txt", "test2.txt" )
Python

remove()方法

使用remove()方法并通过提供要删除的文件的名称作为参数来删除文件。

语法

os.remove(file_name)
Python

示例

以下是删除现有文件test2.txt的示例 -

#!/usr/bin/python3
import os # Delete file test2.txt
os.remove("text2.txt")

此外Python的os模块还提供对目录的操作:

创建、改变、删除目录

====================================================

3、一种新的文件打开方式(codecs模块):

当我面有数据需要保存时,第一时间一般会想到写到一个txt文件中,

当然,数据量比较大的时候还是写到数据库比较方便管理,

需要进行网络传输时要序列化json化

下面主要整理一下平时用的最多的写入到文件中,一般以txt结尾,linux里不会以后缀来区分文件类型,后缀可以随便,也可以没有。

python读写文件估计大家都用open内置函数,或者file这个工厂函数,这两个的效果基本一样。

打开文件的方式:

  一般为:f=open(file_name,access_mode = 'r',buffering = -1)。

  file_name就是文件的路径加文件名字,不加路径则文件会存放在python程序的路径下,

  access_mode就是操作文件的模式,主要有r,w,rb,wb等,细节网上一大堆,

  buffering = -1是用于指示访问文件所采用的缓存方式。0表示不缓存;1表示只缓存一行,n代表缓存n行。如果不提供或为负数,则代表使用系统默认的缓存机制。

打开以后就是写和读的操作。但是用open方法打开会有一些问题。

open打开文件只能写入str类型,不管字符串是什么编码方式。

例如

>>> fr = open('test.txt','a')
>>> line1 = "我爱祖国"
>>> fr.write(line1)

这样是完全可以的。但是有时候我们爬虫或者其他方式得到一些数据写入文件时会有编码不统一的问题,所以就一般都统一转换为unicode

此时写入open方式打开的文件就有问题了。

例如

>>> line2 = u'我爱祖国'
>>> fr.write(line2)

Traceback (most recent call last):
File "<pyshell#4>", line 1, in <module>
fr.write(line2)
UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-11: ordinal not in range(128)
>>>

怎么办,我们可以将上面的line2编码成str类型,但是太麻烦。

我们要把得到的东西先decode为unicode再encode为str。。。

//这段表述有问题,应将其他编码方式的bytes对象decode为unicode的str,再用utf-8的方式encode为bytes对象

input文件(gbk, utf-8...) ----decode-----> unicode(str)  -------encode------> output文件(gbk, utf-8...)

//python3中str都是unicode类型

代替这繁琐的操作就是codecs.open

例如

>>> import codecs
>>> fw = codecs.open('test1.txt','a','utf-8')
>>> fw.write(line2)
>>>

不会报错,说明写入成功。这种方法可以指定一个编码打开文件,使用这个方法打开的文件读取返回的将是unicode。

写入时,如果参数 是unicode,则使用open()时指定的编码进行编码后写入;

如果是str,则先根据源代码文件声明的字符编码,解码成unicode后再进行前述 操作。

相对内置的open()来说,这个方法比较不容易在编码上出现问题。

====================================================

文件对象属性

打开一个文件并且有一个文件对象后,可以获得与该文件相关的各种信息。

以下是与文件对象相关的所有属性的列表 -

编号 属性 描述
1 file.closed 如果文件关闭则返回true,否则返回false
2 file.mode 返回打开文件的访问模式。
3 file.name 返回文件的名称。

====================================================

总结:

对于文件的操作主要分:

1、文件对象的方法

2、os对象的方法

更多详细细节可以根据实际情况自行查阅

====================================================

参考链接:

Python文件I/O:https://www.runoob.com/python/python-files-io.html

Python文件操作的总结:https://www.cnblogs.com/tzhao/p/9855232.html

Python文件读写:https://www.yiibai.com/python/python_files_io.html

Python文件的读写和追加操作:https://www.cnblogs.com/houyan-jessica/p/9492289.html

Python11_文件的读写的更多相关文章

  1. C#对于文件的读写

    C#文件的读写操作 转载请注明出处 http://www.cnblogs.com/Huerye/ /// <summary> /// 写入txt文件 /// </summary> ...

  2. java filechannel大文件的读写

    java读取大文件 超大文件的几种方法 转自:http://wgslucky.blog.163.com/blog/static/97562532201332324639689/   java 读取一个 ...

  3. c# txt文件的读写

    在公司实习,任务不太重,总结一下c#关于txt文件的读写,以便以后有用到的时候可以查看一下.如果有写得不完整的地方还请补充 说明:本人C#水平可能初级都谈不上,高手轻喷,参考:http://www.c ...

  4. C++中关于文件的读写

    在C++的学习过程中,我们时常要用到对文件的操作,下面我们讲一下文件的读写. 首先,读.也就是把已有的文件读到控制台上,那么如何操作呢?首先要将文件操作的输入输出流包含进去. <fstream& ...

  5. php高并发状态下文件的读写

    php高并发状态下文件的读写   背景 1.对于PV不高或者说并发数不是很大的应用,不用考虑这些,一般的文件操作方法完全没有问题 2.如果并发高,在我们对文件进行读写操作时,很有可能多个进程对进一文件 ...

  6. INI 文件的读写操作

    在C#中对INI文件进行读写操作,在此要引入using System.Runtime.InteropServices; 命名空间,具体方法如下: #region 变量 private static r ...

  7. Java程序员的日常—— Properties文件的读写

    在日常的Java程序开发中,Properties文件的读写是很常用的.经常有开发系统通过properties文件来当做配置文件,方便用户对系统参数进行调整. 那么本片就来简单的介绍下,如何使用Prop ...

  8. Android 对 properties文件的读写操作

    -. 放在res中的properties文件的读取,例如对放在assets目录中的setting.properties的读取:PS:之所以这里只是有读取操作,而没有写的操作,是因为我发现不能对res下 ...

  9. C++学习48 对ASCII文件的读写操作

    如果文件的每一个字节中均以ASCII代码形式存放数据,即一个字节存放一个字符,这个文件就是ASCII文件(或称字符文件).程序可以从ASCII文件中读入若干个字符,也可以向它输出一些字符. 对ASCI ...

随机推荐

  1. hdu3472 混合图判断欧拉通路

    对于欧拉回路,先判断出度入度的差是否为偶数,然后最大流一次. 此题是判断有无欧拉通路,前提要判断图是否连通,然后欧拉通路的条件:要么出入度差没有奇数,或者只有2个点. 所以先统计差为奇数的个数,如果不 ...

  2. C/S和B/S交互 2016-03-19 11:27 1275人阅读 评论(30) 收藏

    最近一直在做C/S的项目,每天都超忙,抽个时间写篇博客,之前一直做C/S项目就是各种窗体,各种控件,拖来拖去,然后点进去写方法,做BS的时候呢,因为一直使用的是mvc,所以就是经常手写代码,或者拖引用 ...

  3. C#总结 标签: c# 2014-12-07 19:07 1148人阅读 评论(47) 收藏

    之前考二级的时候,C++没有好好的学,如今到了学C#的时候,又重新明白了一遍出来混,迟早要还得道理,我觉得,其实C#比C++简单,应该是因为之前没有好好学得原因,其实现在学C#,也是和一年前一样,照着 ...

  4. Linux Mint 19.1 安装 Docker 过程笔记

    Linux Mint 19.1 安装 Docker 过程笔记 参考了很多教程,可能有很多教程已经过时. 综合记录一下. 首先修改一下系统的源,使用国内的源. 然后安装 docker sudo apt ...

  5. 2019-2-3-VisualStudio-扩展开发-添加输出窗口

    title author date CreateTime categories VisualStudio 扩展开发 添加输出窗口 lindexi 2019-02-03 11:41:40 +0800 2 ...

  6. @codeforces - 618G@ Combining Slimes

    目录 @description@ @solution@ @part - 0@ @part - 1@ @part - 2@ @part - 3@ @accepted code@ @details@ @d ...

  7. 如何使用jmeter调用soap协议

  8. 杭电多校第二场1012 L - Longest Subarray ce 线段树

    这题是真的秀...我服了...线段树用好了,感觉什么都可以写... 题目大意:给你一个串,问满足以下条件的子串中最长的是多长:对于每个数字,要么在这个子串没出现过,要么出现次数超过k次. 我们对于每一 ...

  9. Redis正确使用的十个技巧

    http://www.jb51.net/article/73376.htm Redis 在当前的技术社区里是非常热门的.从来自 Antirez 一个小小的个人项目到成为内存数据存储行业的标准,Redi ...

  10. hdu 2986 Ballot evaluation (Simulation)

    Problem - 2986 之前在华工赛见过的一道简单的模拟,用map轻松干掉.为了精确,要全程用整型比较.轻松1y~ 代码如下: #include <cstdio> #include ...