文件操作流程
1.打开文件,得到文件句柄并赋值给一个变量
2.通过句柄对文件进行操作
3.关闭文件
最基本的打开,只能阅读,不能操作.
<code>data </code><code>=</code> <code>open</code><code>(</code><code>"file"</code><code>,encoding</code><code>=</code><code>"utf-8"</code><code>).read()</code>
<code>print</code><code>(data)</code>
<code>print</code><code>(</code><code>type</code><code>(data)) </code><code>#字符串格</code>
<code>f </code><code>=</code> <code>open</code><code>(</code><code>"file"</code><code>,</code><code>"r"</code><code>,encoding</code><code>=</code><code>"utf-8"</code><code>) 文件句柄赋值给f</code>
<code>data </code><code>=</code> <code>f.read()</code>
<code>data2 </code><code>=</code> <code>f.read() 当这里读取时,python将从上次data读取的最后开始读取,也就是什么也没有。</code>
<code>r 读取文件 不能写;</code>
<code>w 创建一个文件 不能读;</code>
<code>a 追加内容 不覆盖文件,不能读取。</code>
<code>f.read() 阅读</code>
<code>f.write() 写文件</code>
<code>注意:</code>
<code>U表示在读取时,可以将\r\n自动替换成\n(与r或r</code><code>+</code><code>模式同使用)</code>
<code> </code><code>rU</code>
<code> </code><code>r</code><code>+</code><code>U</code>
<code>b表示处理二进制文件(如:FTP发送上传文件,linux可忽略,windows处理二进制文件时需要标注)</code>
读取前五行
<code> </code><code>方法一、</code>
<code> </code><code>f </code><code>=</code> <code>open</code><code>(</code><code>"file"</code><code>,</code><code>"r"</code><code>,encoding</code><code>=</code><code>"utf-8"</code><code>)</code>
<code> </code><code>print</code><code>(f.readline())</code>
<code> </code><code>f.close()</code>
<code>方法二、</code>
<code> </code><code>for</code> <code>i </code><code>in</code> <code>range</code><code>(</code><code>5</code><code>):</code>
<code> </code><code>print</code><code>(f.readline())</code>
第五行不打印
<code>f.readlines() 是一个列表,</code>
<code> </code><code>for</code> <code>i </code><code>in</code> <code>f.readlines():</code>
<code> </code><code>print</code><code>(i.strip()) 每行后面默认有一个换行符,用strip去掉;</code>
<code>方法一、</code>
<code> </code><code>for</code> <code>index,i </code><code>in</code> <code>enumerate</code><code>(f.readlines()):</code>
<code> </code><code>if</code> <code>index </code><code>=</code><code>=</code> <code>4</code><code>:</code>
<code> </code><code>print</code><code>(</code><code>"------分割线--------"</code><code>)</code>
<code> </code><code>continue</code>
<code> </code><code>print</code><code>(i.strip())</code>
<code> </code><code>count </code><code>=</code> <code>0</code>
<code> </code><code>for</code> <code>i </code><code>in</code> <code>f: f已经成为一个迭代器</code>
<code> </code><code>if</code> <code>count </code><code>=</code><code>=</code> <code>4</code><code>:</code>
<code> </code><code>print</code><code>(</code><code>"------分割线-------"</code><code>)</code>
<code> </code><code>count </code><code>+</code><code>=</code> <code>1</code>
<code> </code><code>continue</code> <code>结束本次循环,进行下一次循环</code>
<code> </code><code>count </code><code>+</code><code>=</code> <code>1</code>
文件方法:
f = open("file","r",encoding="utf-8")
查看当前指针位置
<code>print</code><code>(f.tell())</code>
<code>print</code><code>(f.readline())</code>
指针回到文件开头
<code>f.seek(</code><code>0</code><code>)</code>
<code> </code><code>print</code><code>(f.tell())</code>
查看文件编码
<code>print</code><code>(f.encoding)</code>
做异常处理 f.errors
查看是不是一个终端设备
<code>print</code><code>(f.isatty())</code>
判断光标是否可以移动,可以True 否则False
<code>print</code><code>(f.seekable())</code>
判断文件是否可读
<code>print</code><code>(f.readable())</code>
判断文件是否可写
<code>print</code><code>(f.writable())</code>
强制刷新;用于实时将写的数据写到硬盘上;
<code>print</code><code>(f.flush())</code>
flush 事例进度条
<code>import</code> <code>sys,time</code>
<code> </code><code>for</code> <code>i </code><code>in</code> <code>range</code><code>(</code><code>100</code><code>):</code>
<code> </code><code>sys.stdout.write(</code><code>" "</code><code>)</code>
<code> </code><code>for</code> <code>i </code><code>in</code> <code>range</code><code>(</code><code>100</code><code>):</code>
<code> </code><code>sys.stdout.write(</code><code>" "</code><code>)</code>
<code> </code><code>sys.stdout.flush()</code>
<code> </code><code>time.sleep(</code><code>0.1</code><code>)</code>
判断文件是否关闭
<code>print</code><code>(f.closed)</code>
截断
<code>f </code><code>=</code> <code>open</code><code>(</code><code>"file"</code><code>,</code><code>"a"</code><code>,encoding</code><code>=</code><code>"utf-8"</code><code>)</code>
<code> </code><code>f.truncate() 不加参数清空文件</code>
<code> </code><code>f.truncate(</code><code>10</code><code>) 从文件开始截断</code><code>10</code><code>个字节</code>
文件读写模式打开(读和追加写)
<code>f </code><code>=</code> <code>open</code><code>(</code><code>"file"</code><code>,</code><code>"r+"</code><code>,encoding</code><code>=</code><code>"utf-8"</code><code>)</code>
<code> </code><code>f.write(</code><code>"==============="</code><code>)</code>
文件写读模式打开(创建一个新文件写和读,然后在追加写。)
<code>f </code><code>=</code> <code>open</code><code>(</code><code>"file"</code><code>,</code><code>"w+"</code><code>,encoding</code><code>=</code><code>"utf-8"</code><code>)</code>
<code> </code><code>f.write(</code><code>"===============\n"</code><code>)</code>
<code> </code><code>print</code><code>(f.seek(</code><code>10</code><code>))</code>
<code> </code><code>f.write(</code><code>"+++++++++++++++\n"</code><code>)</code>
文件追加读写模式打开(可以追加写和读)
<code>f </code><code>=</code> <code>open</code><code>(</code><code>"file"</code><code>,</code><code>"a+"</code><code>,encoding</code><code>=</code><code>"utf-8"</code><code>)</code>
文件二进制编码方式读;应用于网络传输
<code>f </code><code>=</code> <code>open</code><code>(</code><code>"file"</code><code>,</code><code>"rb"</code><code>)</code>
文件二进制编码方式写;应用于网络传输
<code>f </code><code>=</code> <code>open</code><code>(</code><code>"file"</code><code>,</code><code>"wb"</code><code>)</code>
<code>print</code><code>(f.write(</code><code>"hhhhhhh"</code><code>.encode())) 默认是utf</code><code>-</code><code>8</code><code>模式</code>
<code>f.close()</code>
文件二进制编码方式追加;应用于网络传输
<code>f </code><code>=</code> <code>open</code><code>(</code><code>"file"</code><code>,</code><code>"ab"</code><code>)</code>
文件修改
1.全部加载到内存里,重新写到文件里
2.修改后,写在另一个文件里
<code>f </code><code>=</code> <code>open</code><code>(</code><code>"file"</code><code>,</code><code>"r"</code><code>,encoding</code><code>=</code><code>"utf-8"</code><code>)</code>
<code>f2 </code><code>=</code> <code>open</code><code>(</code><code>"file2"</code><code>,</code><code>"w"</code><code>,encoding</code><code>=</code><code>"utf-8"</code><code>)</code>
<code>for</code> <code>i </code><code>in</code> <code>f:</code>
<code> </code><code>if</code> <code>"2222"</code> <code>in</code> <code>i:</code>
<code> </code><code>i </code><code>=</code> <code>i.replace(</code><code>"2222"</code><code>,</code><code>"BBBB"</code><code>) </code><code>#i.replace替换功能</code>
<code> </code><code>f2.write(i)</code>
<code>f2.close()</code>
文件操作自动关闭with
特点:自动关闭文件。
为了避免打开文件后忘记关闭,可以通过管理上下文。
<code>例如:with </code><code>open</code><code>(</code><code>"file"</code><code>,</code><code>"r"</code><code>)as f:</code>
<code> </code><code>print</code><code>(f.readline())</code>
python2.7以后可以同时打开多个文件。
<code>with </code><code>open</code><code>(</code><code>"file"</code><code>,</code><code>"r"</code><code>) as f,\</code>
<code> </code><code>open</code><code>(</code><code>"file2"</code><code>,</code><code>"r"</code><code>) as f2:</code>
<code> </code><code>for</code> <code>i </code><code>in</code> <code>f:</code>
<code> </code><code>print</code><code>(i.strip())</code>
<code> </code><code>for</code> <code>i2 </code><code>in</code> <code>f2:</code>
<code> </code><code>print</code><code>(i2.strip())</code>
(python官方要求:一行代码不要超过80个代码;)
本文转自506554897 51CTO博客,原文链接:http://blog.51cto.com/506554897/1945833,如需转载请自行联系原作者