python修改文件格式为unix_软件测试技术之如何用python在Windows系统下,生成UNIX格式文件...
本文將帶你了解軟件測試技術之如何用python在Windows系統下,生成UNIX格式文件,希望對大家學測試技術有所幫助
如何用python在Windows系統下,生成UNIX格式文件
平時測試工作中,少不了制造測試數據。最近一個項目,我就需要制造一批可在UNIX下正確讀取的文件。為確保這批文件能從FTP下載成功,開發叮囑我:“文件中凡是遇到換行,換行符必須是UNIX下的LF,而不是Dos\Windows下的CRLF。”
換行,在普通文檔編輯中,就是按下“Enter”鍵。在編寫代碼時,就是在文件中寫入字符串”\n”。但用python命令w在文件寫入換行”\n”以后,由于是Windows系統的原故,會默認把”\n”實際保存為”\r\n”。
對于Windows下為何是”\r\n”,這里引用網上的解釋:因為Windows采用了傳統的英文打字機模式,它在換行時需分解成兩步——回車”\r”和換行”\n”。回車(carriage return,CR)是將小車退回至起點,相當于把光標從行尾切換到行首,換行(line feed,LF)是將小車切換到下一行,這樣的組合操作就完成了另起一行的目的。
我們首先確認Windows下的換行是否真的是CRLF:把文件用任意一款文本編輯器(以Notepad++為例)打開,在編輯器的菜單欄中,找到“視圖”菜單,點擊“顯示符號”,勾選“顯示所有字符”,就可以顯示換行符了。我們在下圖中可以看到,在Windows系統下,文件中的換行符確實是CRLF。
如何把CRLF變成LF呢?開發給出了一個解決方案。
Method A:
在Notepad++界面右下角,雙擊當前文件格式的描述:“Dos\Windows”,點擊彈框中的“轉換為UNIX格式”,最后保存文件。此時可以看到文件每行結尾都已經展示為“LF”了。
雖然整個轉換過程極為簡單,但要是有一大批這樣的文件需要一個個手動轉換,我不禁感慨光(xīn)陰(hǎo)虛(lèi)度,韶(bù)光(xiǎng)易(dòng)逝。
在表達抗議后,開發表示可以優化此方法,即使用文本編輯器的替換功能:
Method B:
使用Notepad++打開原文件,按下組合鍵Ctrl+F后,在彈框中選擇“替換”欄,在“查找目標”輸入框填寫“\r\n”,“替換為”輸入框填寫“\n”,“查找模式”選擇“擴展(\n\r\t\0\x...)”,點擊“替換所有打開文件”后,一一保存文件即可。
然而把所有的文件保存一遍,并不能提升測試的幸福感。我追求的是盡量減少重復而繁重的手工勞動,解放雙手,高效測試!類似這樣的能力瓶頸,從我進入測試行業開始,就不斷擠占著我的業余時間。為了更好的提高自己,系統地學習測試開發所必需的技能,我報名參加了吳老的測試開發培訓班。
截至目前,吳老已經授課兩個多月,我從無到有,學習了很多基本的python開發知識,也偶爾能接觸到一些巧妙的編程思維。正好這次的數據準備,給我提供了一個實踐的契機,讓我運用最近學習的文件操作知識,體驗了一次局部自動化的樂趣。
下面給大家分享一下我這次愉快的實踐內容,由于真實的測試數據略有復雜,這里就用簡單的兩行數字來舉個栗子。
首先按上課所講的內容,依葫蘆畫瓢,使用Notepad++創建文件并寫入文本內容:
1 ? #coding:utf-8(設定文件編碼格式)
2 import os
3 import time
4
5 #切換到創建文件目錄
6 ? os.chdir(r"C:\Study\Chestnuts\01data")
7
8 #新建創建文件函數
9 def ? create_file():
10
11???? #構造文件名:以“年月日”為文件名的.dat文件
12???? ? t=time.localtime()
13???? ? file_name=time.strftime("%Y-%m-%d",t)+".dat"
14???? #創建并打開文件
15???? ? fp=open(file_name,'w+')
16???? #寫入文件內容
17???? ? fp.writelines("12345\n")
18???? ? fp.writelines("67890\n")
19???? #關閉文件
20???? ? fp.close()
21
22 #調用函數
23 create_file()
如上圖所示,執行腳本就會生成一份原始文件,不過在兩行內容的末尾,換行符均顯示為CRLF,接下來就是轉換的工作了。
Method C:對原文件進行格式轉換
如果是對現有的文件進行處理,可以使用Notepad++再編寫一個轉換的腳本。參考網上的方法,使用rU方式讀取文件內容,使用wb方式寫入文件內容,如下圖所示:
1 #coding:utf-8
2 import os
3
4 #文件路徑準備
5 ? route=r"C:\Study\Chestnuts\01data"
6
7 #遍歷路徑下目錄,文件夾,文件
8 for ? root,dirs,files in os.walk(route):
9???? ? #遍歷文件
10???? for ? name in files:
11???????? #歸納文件名特征
12???????? ? if name[-3:]=='dat':
13???????????? #拼接文件名(目錄+文件名稱)
14???????????? ? catalog=os.path.join(root,name)
15???????????? #把所有行分割符替換為換行符\n返回.
16???????????? ? fp=open(catalog,"rU+")
17???????????? #讀取文件并保存
18???????????? ? strings=fp.read()
19???????????? fp.close()
20???????????? #使用二進制寫文件
21???????????? ? fp1=open(catalog,"wb")
22???????????? fp1.seek(0)
23???????????? ? fp1.write(strings)
24???????????? fp1.flush()
25???????????? fp1.close()
執行這個腳本,就能對現有文件格式進行轉換,得到換行符是LF的文件了。
結果是對了,但執行兩個腳本來生成一份最終文件,難免讓我覺得還不夠簡單。我分析了以上文件轉換的代碼,發現關鍵步驟是使用二進制(wb)方式寫入文件。
Method D:原文件使用二進制方式寫入
既然這樣,不如在一開始就使用二進制寫文件,一步到位!并且只需把源代碼中寫入方式(w)變成二進制寫入(wb)方式即可。你看,僅僅添加了一個字母,就省去了十幾行代碼,還達到了預期目標,可謂一舉多得!
#coding:utf-8(設定文件編碼格式)
import os
import time
#切換到創建文件目錄
os.chdir(r"C:\Study\Chestnuts\01data")
#新建創建文件函數
def create_file():
#構造文件名:以“年月日”為文件名的.dat文件
t=time.localtime()
file_name=time.strftime("%Y-%m-%d",t)+".dat"
#創建并打開文件
fp=open(file_name,'wb+')
#寫入文件內容
fp.writelines("12345\n")
fp.writelines("67890\n")
#關閉文件
fp.close()
#調用函數
create_file()
窺一斑而見全豹,以上的代碼優化,提醒我編程時需要多思考,理清邏輯,最終找到達成目標的最佳方案。在練習編寫代碼時,不僅要認真分析需求,分解步驟,也要注意積累好的方法進行沉淀,這也是我寫下本文的目的所在。
如果大家在測試工作中,也遇到了類似的困難,覺得自己能力欠缺,期望通過自己編寫代碼解決問題,歡迎大家咨詢我或者吳老。可以加入我們的“光榮之路python群(457561756)”進行提問,也可以來吳老的測試開發培訓班一起學習。為了更全面的提升,為了更豐厚的待遇,也為了更美好的生活,讓我們在光榮之路一起奮斗!
本文由職坐標整理并發布,希望對同學們有所幫助。了解更多詳情請關注職坐標軟件測試之測試技術頻道!
總結
以上是生活随笔為你收集整理的python修改文件格式为unix_软件测试技术之如何用python在Windows系统下,生成UNIX格式文件...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 澄海哪里学机器人编程_少年学机器人编程
- 下一篇: JAVA50道经典编程题