如何用python在Windows系统下,生成UNIX格式文件

如何用python在Windows系统下,生成UNIX格式文件,第1张

 平时测试工作中,少不了制造测试数据。最近一个项目,我就需要制造一批可在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”,点击d框中的“转换为UNIX格式”,最后保存文件。此时可以看到文件每行结尾都已经展示为“LF”了。

虽然整个转换过程极为简单,但要是有一大批这样的文件需要一个个手动转换,我不禁感慨光(xīn)阴(hǎo)虚(lèi)度,韶(bù)光(xiǎng)易(dòng)逝。

在表达抗议后,开发表示可以优化此方法,即使用文本编辑器的替换功能:

Method B:

使用Notepad++打开原文件,按下组合键Ctrl+F后,在d框中选择“替换”栏,在“查找目标”输入框填写“\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()

ru拼音读法如下:

ru是两拼音,是把声母r和韵母u自然连贯地组合念出。声母r发音时,舌尖上翘,靠近硬颚前部,留出窄缝,嗓子用力发声,气流从窄缝中挤出,摩擦成音。

韵母u发音时,两唇收缩成圆形,略向前突出,舌后缩,舌面后部高高隆起和软腭相对。发音时,声带振动,软腭上升。把两个音拼到一起,即滑兆得ru这个音。

ru读音的字有这些:

如:具有依照顺从;像,相似,同什么一样;比得上,及;假若,假设等意思,出自《说文》:如,从随也。从女,从口。

入:具有进,由外到内;适合,恰好合适等意思。甲骨文字形,像个尖头器具,尖头器具容易进入。

汝:具有你的意思,还可以指姓氏;出自《说文》:汝水出宏农卢氏,还归山东入淮。

茹:吃:~素。含核含辛~苦。信老租姓。

儒:(名)春秋时以孔子为代表的学派:~术|~生。(名)旧时指读书人:~医|老~。

嚅: 欲言 。如:嚅嗫(说话吞吞吐吐的样子);嚅忍(欲言而止)。细语貌 。如:嚅嚅(私语貌);嚅哜(吟诵;品味)

蠕:虫类爬行的样子;微动貌 。如:蠕活(慢慢地活动);蠕蜚(指爬行和飞翔的昆虫);蠕簇(蠕动聚集)

拼音首袜是rú的字是如。

一、如的释义

1、适合;依照。者粗激

2、如同。

3、及;比得上(只用于否定式,比较得失或高下)。

二、字源解说

如字最早见于金文。本义是顺从,后引申为像;如同等。

三、组词

如果、如何、比如、如今、如意等凳贺。

扩展资料:

一、如果 [ rú guǒ ]

连词。一般用于上半句,表示假设,下半句推出结论或提出问题,常用“那么”、“那”、“则”、“就”等词呼应。

二、如何 [ rú hé ]

疑问代词。怎么;怎么样。

三、比如 [ bǐ rú ]

举例时的发端语。

四、如今 [ rú jīn ]

“现在”可以指较长的一段时间,也可以指极短的时间,“如今”只能指较长的一段时间。

五、如意 [ rú yì ]

1、符合心意。

2、一种象征吉祥的器物,用玉、竹、骨等制成,头呈灵芝形或云形,柄微曲,供赏玩。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/tougao/8222633.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-14
下一篇 2023-04-14

发表评论

登录后才能评论

评论列表(0条)

保存