Python 基礎 - 文件的操作
在來我們來玩一下文件操作,這個在未來工作上,也是會很常用到的功能
Python2.7中,可以用file()來打開文件,而在Python3中,一律都是用open(),接下來在當前目錄下,先建立一個空文件叫test
#!/usr/bin/env python3
# -*- coding:utf-8 -*-
f = open("test")
f.write('i am a ironman')
f.close()
---------------執行結果---------------
io.UnsupportedOperation: not writable
Process finished with exit code 1
報錯了,雖然打開了,但不可以寫,因為預設只有讀取的權限,沒有w(寫入)的權限,詳細可以參考下圖

那到底有幾種模式呢?請看下表
文件操作模式:
| Character | Meaning |
|---|---|
r |
open for reading (default) |
w |
open for writing, truncating the file first |
x |
create a new file and open it for writing |
a |
open for writing, appending to the end of the file if it exists |
b |
binary mode |
t |
text mode (default) |
+ |
open a disk file for updating (reading and writing) |
U |
universal newline mode (deprecated) |
所以依據上表的權限,我們給予w的權限試試
#!/usr/bin/env python3
# -*- coding:utf-8 -*-
f = open("test", 'w')
f.write('i am a ironman')
f.close()
咦!可以寫入了,那就在多寫個幾行試試?
#!/usr/bin/env python3
# -*- coding:utf-8 -*-
f = open("test", 'w')
f.write('i am a ironman')
f.write('my name is tony stark')
f.close()
觀察一下,test這個文字檔,有發現什麼了嗎?是的,你剛剛打的字都已經連起來了,i am a ironmanmy name is tony stark就像是這樣子,明明程式是分別寫二行的,但
怎麼還會連起來呢?這其實是因為沒有使用換行符號(\n),只要在文字最後面加入換行符號就可以換行嚕
再來我們來試試用a權限,先寫入檔案,再讀取檔案看看,試試有什麼作用?
#!/usr/bin/env python3
# -*- coding:utf-8 -*-
f = open("test", 'a')
#f.write('i am a ironman')
f.write('my name is tony stark')
date = f.read()
print('----->', date)
f.close()
---------------執行結果---------------
io.UnsupportedOperation: not readable
Process finished with exit code 1
咦,怎麼會出錯呢?其實是因為a並不能做讀取的動作,它只會在原有的文件裡的最後面一行,附加新增的文字進去
以上就是簡單的文件操作,接下來在進階一點點,如果我想要打印文件的前三行,怎麼做?
#!/usr/bin/env python3
# -*- coding:utf-8 -*-
f = open('test', 'r')
print(f.readline())
print(f.readline())
print(f.readline())
---------------執行結果---------------
Python(英國發音:/ˈpaɪθən/ 美國發音:/ˈpaɪθɑːn/),是一種物件導向、直譯式的電腦程式語言。
它包含了一組功能完備的標準庫,能夠輕鬆完成很多常見的任務。它的語法簡單,與其它大多數程式設計語言使用大括弧不一樣,它使用縮進來定義語句塊。
與Scheme、Ruby、Perl、Tcl等動態語言一樣,Python具備垃圾回收功能,能夠自動管理記憶體使用。
它經常被當作腳本語言用於處理系統管理任務和網路程式編寫,然而它也非常適合完成各種高階任務。
Process finished with exit code 0
可是上面代碼僅限用於讀取很少的行數,如果今天要讀取二、三十行,那總不能一直使用print(f.readline())吧,所以我們可以應用之前所學的,使用for循環來簡化代碼,並達成我們想要的
#!/usr/bin/env python3
# -*- coding:utf-8 -*-
f = open('test', 'r')
for i in range(3):
print(f.readline())
---------------執行結果---------------
Python(英國發音:/ˈpaɪθən/ 美國發音:/ˈpaɪθɑːn/),是一種物件導向、直譯式的電腦程式語言。
它包含了一組功能完備的標準庫,能夠輕鬆完成很多常見的任務。它的語法簡單,與其它大多數程式設計語言使用大括弧不一樣,它使用縮進來定義語句塊。
與Scheme、Ruby、Perl、Tcl等動態語言一樣,Python具備垃圾回收功能,能夠自動管理記憶體使用。
Process finished with exit code 0
再來,把這個文件用循環跑過一次
#!/usr/bin/env python3
# -*- coding:utf-8 -*-
f = open('test', 'r')
for line in f.readlines():
print(line.strip())
---------------執行結果---------------
Python(英國發音:/ˈpaɪθən/ 美國發音:/ˈpaɪθɑːn/),是一種物件導向、直譯式的電腦程式語言。
它包含了一組功能完備的標準庫,能夠輕鬆完成很多常見的任務。它的語法簡單,與其它大多數程式設計語言使用大括弧不一樣,它使用縮進來定義語句塊。
與Scheme、Ruby、Perl、Tcl等動態語言一樣,Python具備垃圾回收功能,能夠自動管理記憶體使用。
它經常被當作腳本語言用於處理系統管理任務和網路程式編寫,然而它也非常適合完成各種高階任務。
Python虛擬機本身幾乎可以在所有的作業系統中運行。
使用一些諸如py2exe、PyPy、PyInstaller之類的工具可以將Python原始碼轉換成可以脫離Python解釋器執行的程式。
Python的官方直譯器是CPython,該直譯器用C語言編寫,是一個由社群驅動的自由軟體,目前由Python軟體基金會管理。
Python支援命令式程式設計、物件導向程式設計、函數式編程、面向側面的程式設計、泛型編程多種編程範式。
Process finished with exit code 0
上面這代碼是先把文件讀成一個列表,並且把換行符號給刪除了,再來如果我們希望在第四行不要打印出來,該怎麼做?
#!/usr/bin/env python3
# -*- coding:utf-8 -*-
f = open('test', 'r')
for index, line in enumerate(f.readlines()):
if index == 3:
print('---------我是分隔線----------')
continue
print(line.strip())
---------------執行結果---------------
Python(英國發音:/ˈpaɪθən/ 美國發音:/ˈpaɪθɑːn/),是一種物件導向、直譯式的電腦程式語言。
它包含了一組功能完備的標準庫,能夠輕鬆完成很多常見的任務。它的語法簡單,與其它大多數程式設計語言使用大括弧不一樣,它使用縮進來定義語句塊。
與Scheme、Ruby、Perl、Tcl等動態語言一樣,Python具備垃圾回收功能,能夠自動管理記憶體使用。
---------我是分隔線----------
Python虛擬機本身幾乎可以在所有的作業系統中運行。
使用一些諸如py2exe、PyPy、PyInstaller之類的工具可以將Python原始碼轉換成可以脫離Python解釋器執行的程式。
Python的官方直譯器是CPython,該直譯器用C語言編寫,是一個由社群驅動的自由軟體,目前由Python軟體基金會管理。
Python支援命令式程式設計、物件導向程式設計、函數式編程、面向側面的程式設計、泛型編程多種編程範式。
Process finished with exit code 0
我們一樣沿用之前上一個的代碼,並且使用下標的方式,來標示出第四行,再使用continue,這樣就可以不打印出來第四行了
假設,我們現在有一個文件,大約有2GB,那使用readlines()這種方式的話,是一次性的先把資料讀成列表後,暫時放在記憶體當中,會相當花時間,所以readlines()只適合讀取小文件,所以那有沒有一種方法,每讀一行,就只保留一行在記憶體裡,這要怎麼弄呢?
#!/usr/bin/env python3
# -*- coding:utf-8 -*-
f = open('test', 'r')
for line in f:
print(line)
上面這代碼就是一行一行的讀,且記憶體裡只會存一行,這寫法是效能較好的,那為什麼會變的比較好,是因為已經把f這個文件變成一個迭代器,就不是列表的形式了,所以也沒辦法透過enumerate()來做下標了,因此我們需要自已做一個計數器來計算到幾行,好了,那要怎麼把上面的代碼跟上一個代碼做結合呢?
#!/usr/bin/env python3
# -*- coding:utf-8 -*-
f = open('test', 'r')
count = 0
for line in f:
if count == 3:
print('---------我是分隔線----------')
count += 1
continue
print(line)
count += 1
---------------執行結果---------------
Python(英國發音:/ˈpaɪθən/ 美國發音:/ˈpaɪθɑːn/),是一種物件導向、直譯式的電腦程式語言。
它包含了一組功能完備的標準庫,能夠輕鬆完成很多常見的任務。它的語法簡單,與其它大多數程式設計語言使用大括弧不一樣,它使用縮進來定義語句塊。
與Scheme、Ruby、Perl、Tcl等動態語言一樣,Python具備垃圾回收功能,能夠自動管理記憶體使用。
---------我是分隔線----------
Python虛擬機本身幾乎可以在所有的作業系統中運行。
使用一些諸如py2exe、PyPy、PyInstaller之類的工具可以將Python原始碼轉換成可以脫離Python解釋器執行的程式。
Python的官方直譯器是CPython,該直譯器用C語言編寫,是一個由社群驅動的自由軟體,目前由Python軟體基金會管理。
Python支援命令式程式設計、物件導向程式設計、函數式編程、面向側面的程式設計、泛型編程多種編程範式。
Process finished with exit code 0
知識點:
- 文件句柄: 就是文件的記憶體位置,句柄包含了:文件名、字符集、大小、硬碟的起始位置等。
參考資料:
Python 基礎 - 文件的操作的更多相关文章
- Python 基礎 - 文件操作_v2
嗯,那如何要把游標的位置給打印來? #!/usr/bin/env python3 # -*- coding:utf-8 -*- f = open('test', 'r') print(f.tell() ...
- Python 基礎 - 字符串常用操作
字符串常用操作 今天就介紹一下常用的字符串操作,都是以 Python3撰寫的 首字母變大寫 #!/usr/bin/env python3 # -*- coding:utf-8 -*- name = & ...
- Python 基礎 - 字典的操作使用
接下來介紹字典,這在未來工作上,會是很常使用的,就來好好了解一下唄- 字典是一個 key(鍵)-value(值) 的數據類型,可以儲存很多訊息 #!/usr/bin/env python3 # -*- ...
- Python 基礎 - for流程判斷
今天介紹另一個循環判斷式 for循環,首先,先寫一個很簡單的 for循環的代碼 #!/usr/bin/env python3 # -*- coding:utf-8 -*- for i in range ...
- Python 基礎 - if else流程判斷
hmm~前面講了那麼多,終於可以稍稍的正式進入另一個階段,沒錯,要開始寫判斷式了 這次先從最簡單的判斷式開始,if else 開始- Go 首先,之前有寫有一個簡單的互動式 用戶輸入 的代碼,忘記了嗎 ...
- Python:目录和文件的操作模块os.path和OS常用方法
1.目录和文件的操作模块os.path,在使用之前要先导入:import os.path.它主要有以下几个重要的功能函数: #!/user/bin/python #coding= utf-8 impo ...
- python 基础之文件读操作
创建一个名为‘尘曦’的文件内容如下 Hadoop是一个由Apache基金会所开发的分布式系统基础架构. 用户可以在不了解分布式底层细节的情况下,开发分布式程序.充分利用集群的威力进行高速运算和存储. ...
- python学习8 文件的操作
本文拷贝了on testing 的<python之文件操作:文件的读写>,只做学习之用 python的文件读写通过 一.用open函数 二.对文件读写操作 三.读取文件位置定位 1. op ...
- python批量进行文件修改操作
python批量修改文件扩展名 在网上下载了一些文件,因为某种原因,扩展名多了一个后缀'.xxx',手动修改的话因为文件太多,改起来费时费力,于是决定写个小脚本进行修改. 1.要点: import r ...
随机推荐
- oracle date change
select to_char(sysdate,'yyyy') from dual;-----2016select to_number(to_char(sysdate,'MM'))||'月' from ...
- PHP制作验证码
session_start();$a = array('a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r',' ...
- C语言经典例题100
C语言经典例题100 来源 http://www.fishc.com 适合初学者 ----------------------------------------------------------- ...
- javascript如何用户的判断操作系统
<script> alert(window.navigator.userAgent); if(window.navigator.userAgent.indexOf("Window ...
- HalconMFC(三)之打开图像_简单处理
在VS2010中配置完halcon之后就得写个最简单的程序满足一下咱们的自信心呀! 第一步,新建MFC程序 最好是按照下面这么设置然后点击"完成",就不会报错 第二步,导出C++代 ...
- Spring IOC 依赖注入的两种方式XML和注解
依赖注入的原理 依赖注入的方式---XML配置 依赖注入的方式---注解的方式 Spring 它的核心就是IOC和AOP.而IOC中实现Bean注入的实现方式之一就是DI(依赖注入). 一 DI的原理 ...
- JS设置弹出小窗口。
经常上网的朋友可能会到过这样一些网站,一进入首页立刻会弹出一个窗口,或者按一个连接或按钮弹出,通常在这个窗口里会显示一些注意事项.版权信息.警告.欢迎光顾之类的话或者作者想要特别提示的信息.其实制作这 ...
- tomcat启动不了
今天弄了一个项目想在在自己的电脑上面运行起来,当部署在tomcat上的时候发现tomcat就是启动不来,思忖了一段时间后发现原来是tomcat的相关jar没有导入进去.所以,properties-&g ...
- X3850M2安装CertOS 7 KVM 2--DMMP
1,在DS8000中调整vg为单台服务器.检查另一台服务器内已经没有磁盘信息. 2,在余下的服务器中安装DMMP. 参考:http://edwin-wang.com/2012/08/device-ma ...
- ARMLinux下Alignment trap的一些测试 【转自 李迟的专栏 CSDN http://blog.csdn.net/subfate/article/details/7847356
项目中有时会遇到字节对齐的问题,英文为“Alignment trap”,如果直译,意思为“对齐陷阱”,不过这个说法不太好理解,还是直接用英文来表达. ARM平台下一般是4字节对齐,可以参考文后的给出的 ...