1、文件操作流程:
打开文件,得到文件句柄并赋值给一个变量
通过句柄对文件进行操作
关闭文件
如下文件:
<code>2017</code><code>-</code><code>03</code><code>-</code><code>24</code> <code>11</code><code>:</code><code>25</code><code>:</code><code>06</code><code>:</code><code>349</code> <code>-</code> <code>info: [debug] [AndroidBootstrap] Sending command to android: {</code><code>"cmd"</code><code>:</code><code>"shutdown"</code><code>}</code>
<code>2017</code><code>-</code><code>03</code><code>-</code><code>24</code> <code>11</code><code>:</code><code>25</code><code>:</code><code>06</code><code>:</code><code>355</code> <code>-</code> <code>info: [debug] [AndroidBootstrap] Received command result </code><code>from</code> <code>bootstrap</code>
<code>2017</code><code>-</code><code>03</code><code>-</code><code>24</code> <code>11</code><code>:</code><code>25</code><code>:</code><code>06</code><code>:</code><code>356</code> <code>-</code> <code>info: [debug] [UiAutomator] Shutting down UiAutomator</code>
<code>2017</code><code>-</code><code>03</code><code>-</code><code>24</code> <code>11</code><code>:</code><code>25</code><code>:</code><code>06</code><code>:</code><code>357</code> <code>-</code> <code>info: [debug] [UiAutomator] Moving to state </code><code>'stopping'</code>
<code>2017</code><code>-</code><code>03</code><code>-</code><code>24</code> <code>11</code><code>:</code><code>25</code><code>:</code><code>06</code><code>:</code><code>360</code> <code>-</code> <code>info: [AndroidBootstrap] [BOOTSTRAP LOG] [debug] Got data </code><code>from</code> <code>client: {</code><code>"cmd"</code><code>:</code><code>"shutdown"</code><code>}</code>
<code>2017</code><code>-</code><code>03</code><code>-</code><code>24</code> <code>11</code><code>:</code><code>25</code><code>:</code><code>06</code><code>:</code><code>361</code> <code>-</code> <code>info: [AndroidBootstrap] [BOOTSTRAP LOG] [debug] Got command of </code><code>type</code> <code>SHUTDOWN</code>
操作流程:
<code>f </code><code>=</code> <code>open</code><code>(</code><code>'log.txt'</code><code>,</code><code>'r'</code><code>)</code>
<code>print</code><code>(f.read())</code>
<code>f.close()</code>
注意: 在win系统中log文件是utf8保存的,打开文件时open函数是通过操作系统打开的文件,而win操作系统默认的是gbk编码,所以直接打开会乱码,需要f=open('hello',encoding='utf8'),hello文件如果是gbk保存的,则直接打开即可。
2、文件打开模式
<code># ========= ===============================================================</code>
<code>#</code>
<code># Character Meaning</code>
<code># --------- ---------------------------------------------------------------</code>
<code># 'r' open for reading (default)</code>
<code># 'w' open for writing, truncating the file first</code>
<code># 'x' create a new file and open it for writing</code>
<code># 'a' open for writing, appending to the end of the file if it exists</code>
<code># 'b' binary mode</code>
<code># 't' text mode (default)</code>
<code># '+' open a disk file for updating (reading and writing)</code>
<code># 'U' universal newline mode (deprecated)</code>
3、文件操作方法
获取文件内容
<code>f </code><code>=</code> <code>open</code><code>(</code><code>'log.txt'</code><code>,</code><code>'r'</code><code>) </code>
<code>data </code><code>=</code> <code>f.read() </code>
<code>print</code><code>(data)</code>
输出:
2017-03-24 11:25:06:349 - info: [debug] [AndroidBootstrap] Sending command to android: {"cmd":"shutdown"}
2017-03-24 11:25:06:355 - info: [debug] [AndroidBootstrap] Received command result from bootstrap
2017-03-24 11:25:06:356 - info: [debug] [UiAutomator] Shutting down UiAutomator
2017-03-24 11:25:06:357 - info: [debug] [UiAutomator] Moving to state 'stopping'
2017-03-24 11:25:06:360 - info: [AndroidBootstrap] [BOOTSTRAP LOG] [debug] Got data from client: {"cmd":"shutdown"}
2017-03-24 11:25:06:361 - info: [AndroidBootstrap] [BOOTSTRAP LOG] [debug] Got command of type SHUTDOWN
===========================================================================================
<code>f = </code><code>open</code><code>(</code><code>'log.txt'</code><code>,</code><code>'r'</code><code>)</code>
<code>data1 = f.</code><code>read</code><code>(10) </code><code>#读取10个字符。(在这里汉字也只占一个单位)</code>
<code>print(data1)</code>
2017-03-24
readline和readlines
<code>print</code><code>(f.readlines()) </code><code>#返回的是一个列表,注意换行符</code>
['2017-03-24 11:25:06:349 - info: [debug] [AndroidBootstrap] Sending command to android: {"cmd":"shutdown"}\n', '2017-03-24 11:25:06:355 - info: [debug] [AndroidBootstrap] Received command result from bootstrap\n', '2017-03-24 11:25:06:356 - info: [debug] [UiAutomator] Shutting down UiAutomator\n', "2017-03-24 11:25:06:357 - info: [debug] [UiAutomator] Moving to state 'stopping'\n", '2017-03-24 11:25:06:360 - info: [AndroidBootstrap] [BOOTSTRAP LOG] [debug] Got data from client: {"cmd":"shutdown"}\n', '2017-03-24 11:25:06:361 - info: [AndroidBootstrap] [BOOTSTRAP LOG] [debug] Got command of type SHUTDOWN']
<code>print</code><code>(f.readline()) </code><code>#逐行读取</code>
<code>print</code><code>(f.readline())</code>
<code>print</code><code>(f.readline(),f.readline(),f.readline()) </code><code>#逐行读取,每行末尾换行符</code>
输出:(注意每行末尾的换行符)
2017-03-24 11:25:06:357 - info: [debug] [UiAutomator] Moving to state 'stopping'
2017-03-24 11:25:06:360 - info: [AndroidBootstrap] [BOOTSTRAP LOG] [debug] Got data from client: {"cmd":"shutdown"}
<code>for</code> <code>line </code><code>in</code> <code>f.readlines():</code>
<code> </code><code>print</code><code>(line.strip())</code>
<code>print</code><code>(f)</code>
<code>for</code> <code>i </code><code>in</code> <code>f:</code>
<code> </code><code>print</code><code>(i.strip())</code>
<_io.TextIOWrapper name='log.txt' mode='r' encoding='cp936'>
<code>n </code><code>=</code> <code>0</code>
<code> </code><code>if</code> <code>n </code><code>=</code><code>=</code> <code>3</code><code>:</code>
<code> </code><code>i </code><code>=</code> <code>'</code><code>'.join([i.strip(),'</code> <code>this </code><code>is</code> <code>line </code><code>4</code><code>'])</code>
<code> </code><code>n </code><code>+</code><code>=</code> <code>1</code>
2017-03-24 11:25:06:357 - info: [debug] [UiAutomator] Moving to state 'stopping' this is line 4
tell和seek
<code>print</code><code>(f.read(</code><code>25</code><code>))</code>
<code>print</code><code>(f.tell()) </code><code>#取出光标所在位置</code>
<code>print</code><code>(f.seek(</code><code>0</code><code>)) </code><code>#移动光标到指定的位置</code>
<code>print</code><code>(f.read(</code><code>50</code><code>))</code>
2017-03-24 11:25:06:349 -
25
2017-03-24 11:25:06:349 - info: [debug] [AndroidBo
注意:read后不管是中文字符还是英文字符,都统一算一个单位,read(6),此刻就读了6个中文字符;而seek和tell对于英文字符就是占一个,中文字符占三个,区分与read()的不同.
flush:同步把数据从缓存移动到磁盘上去
<code>#进度条实例</code>
<code>import</code> <code>sys,time</code>
<code>for</code> <code>i </code><code>in</code> <code>range</code><code>(</code><code>30</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的flush</code>
<code> </code><code>print</code><code>(</code><code>'*'</code><code>,end</code><code>=</code><code>'',flush</code><code>=</code><code>True</code><code>)</code>
其他扩展:
with:
为了避免打开文件后忘记关闭,可以通过管理上下文,即:
<code>with </code><code>open</code><code>(</code><code>'log.txt'</code><code>,</code><code>'r'</code><code>) as f:</code>
<code> </code><code>print</code><code>(f.readline())</code>
在Python 2.7 后,with又支持同时对多个文件的上下文进行管理,即:如此方式,当with代码块执行完毕时,内部会自动关闭并释放文件资源。
<code>#with 同时管理多个文件对象</code>
<code>with </code><code>open</code><code>(</code><code>'log1'</code><code>,</code><code>'r'</code><code>) as f_read, </code><code>open</code><code>(</code><code>'log2'</code><code>,</code><code>'w'</code><code>) as f_write:</code>
<code> </code><code>for</code> <code>line </code><code>in</code> <code>f_read:</code>
<code> </code><code>f_write.write(line)</code>
<code></code>
本文转自cqtesting51CTO博客,原文链接:http://blog.51cto.com/cqtesting/1959698 ,如需转载请自行联系原作者