天天看点

python学习笔记文件操作(六)

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>

&lt;_io.TextIOWrapper name='log.txt' mode='r' encoding='cp936'&gt;

<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 ,如需转载请自行联系原作者