如何⽤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)逝。
python怎么读取dat文件  在表达抗议后,开发表⽰可以优化此⽅法,即使⽤⽂本编辑器的替换功能:
  Method B:
  使⽤Notepad++打开原⽂件,按下组合键Ctrl+F后,在弹框中选择“替换”栏,在“查⽬标”输⼊框填写“\r\n”,“替换为”输⼊框填
写“\n”,“查模式”选择“扩展(\n\r\t\)”,点击“替换所有打开⽂件”后,⼀⼀保存⽂件即可。
  然⽽把所有的⽂件保存⼀遍,并不能提升测试的幸福感。我追求的是尽量减少重复⽽繁重的⼿⼯劳动,解放双⼿,⾼效测试!类似这样的能⼒瓶颈,从我进⼊测试⾏业开始,就不断挤占着我的业余时间。为了更好的提⾼⾃⼰,系统地学习测试开发所必需的技能,我报名参加了吴⽼的测试开发培训班。
  截⾄⽬前,吴⽼已经授课两个多⽉,我从⽆到有,学习了很多基本的python开发知识,也偶尔能接触到⼀些巧妙的编程思维。正好这次的数据准备,给我提供了⼀个实践的契机,让我运⽤最近学习的⽂件操作知识,体验了⼀次局部⾃动化的乐趣。
  下⾯给⼤家分享⼀下我这次愉快的实践内容,由于真实的测试数据略有复杂,这⾥就⽤简单的两⾏数字来举个栗⼦。
  ⾸先按上课所讲的内容,依葫芦画瓢,使⽤Notepad++创建⽂件并写⼊⽂本内容:
1#coding:utf-8(设定⽂件编码格式)
2import os
3import time
4
5#切换到创建⽂件⽬录
6 os.chdir(r"C:\Study\Chestnuts\01data")
7
8#新建创建⽂件函数
9def 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
2import os
3
4#⽂件路径准备
5 route=r"C:\Study\Chestnuts\01data"
6
7#遍历路径下⽬录,⽂件夹,⽂件
8for root,dirs,files in os.walk(route):
9#遍历⽂件
10for name in files:
11#归纳⽂件名特征
12if name[-3:]=='dat':
13#拼接⽂件名(⽬录+⽂件名称)
14            catalog=os.path.join(root,name)
15#把所有⾏分割符替换为换⾏符\n返回.
16            fp=open(catalog,"rU+")
17#读取⽂件并保存
18            ad()
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)”进⾏提问,也可以
来吴⽼的测试开发培训班⼀起学习。为了更全⾯的提升,为了更丰厚的待遇,也为了更美好的⽣活,让我们在光荣之路⼀起奋⽃!

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。