
如何在Windows系统下使用Python生成UNIX格式文件
在正常测试中,制造测试数据是必不可少的. 对于最近的项目,我需要制作一批可以在UNIX下正确读取的文件. 为了确保可以从FTP成功下载这些批次的文件,开发人员告诉我: “只要文件中遇到换行符,换行符就必须在UNIX下为LF,而在Dos \ Windows下为CRLF. ”
在常规文档编辑中,换行符是按“ Enter”键. 编写代码时,是在文件中写入字符串“ \ n”. 但是,由于Windows系统的原因,使用python命令w将换行符“ \ n”写入文件后,实际上默认的“ \ n”被保存为“ \ r \ n”.
关于Windows下为什么它是“ \ r \ n”的原因,这是Internet上的一种解释: 由于Windows使用传统的英文打字机模式,因此在换行时需要分为两个步骤返回“ \ r”和换行符“ \ N”. 回车(CR)是将回车返回到起点,这等效于将光标从行尾切换到行首. 换行(LF)用于将手推车切换到下一行. 该组合操作完成. 开始行的目的.
我们首先确认Windows下的换行符是否真的是CRLF: 使用任何文本编辑器打开文件(以Notepad ++为例),在编辑器菜单栏中找到“查看”菜单fly是什么格式的文件,然后单击“显示”符号. ,请选中“显示所有字符”以显示换行符. 在下图中,我们可以看到在Windows下文件中的换行符确实是CRLF.


如何将CRLF转换为LF?开发提供了解决方案.
方法A:
在Notepad ++界面的右下角,双击当前文件格式的描述: “ Dos \ Windows”,在弹出框中单击“转换为UNIX格式”,最后保存文件. 此时,您可以看到文件的每一行的末尾已显示为“ LF”.

尽管整个转换过程非常简单,但是如果有大量此类文件需要手动转换,我不禁会感到轻(xīn),Yin(hǎo),虚拟(lèi)度,邵(bù)轻(xiǎng)易(dòng)死亡.
表示抗议后,开发人员表明可以优化此方法,即使用文本编辑器的替换功能:

方法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,下一步是转换.
方法C: 原始文件的格式转换
如果要处理现有文件,则可以使用Notepad ++编写另一个转换脚本. 请参考Internet上的方法,使用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)方式写入文件.
方法D: 原始文件以二进制模式编写
在这种情况下,最好一开始就以二进制形式写入文件!只需将源代码中的写入方法(w)更改为二进制写入(wb). 您会发现fly是什么格式的文件,仅添加一个字母就可以节省十几行代码,并且可以达到预期的目标,这可以说是不胜枚举!
#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()
通过窥视整个豹子,上面的代码优化使我想起了我在编程时需要思考的更多问题,阐明逻辑,最后找到实现目标的最佳解决方案. 在练习编写代码时,我们不仅应该仔细分析需求,分解步骤,而且还要注意积累好的析出方法,这也是编写本文的目的.
如果您在测试中遇到类似的困难,并且觉得自己缺乏能力,我希望编写自己的代码来解决问题. 欢迎咨询我或吴老. 您可以加入我们的“ Glorious Road Python组(457561756)”提问,也可以参加Wu Lao的测试开发培训班来一起学习. 为了得到更全面的宣传,更慷慨的待遇以及更好的生活,让我们一起在光荣的道路上共同努力!
作者: 蝇类
来源:
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/bofangqi/article-274559-1.html
猛禽配凡凡
十几亿中国人民是祖国的坚强后盾
一起围捕拉森号去