2015-08-09 34 views
0

您好以下哪一段代码需要或使用较少的资源? 有没有更好的方法?写入文件?哪种方法需要更少的资源?

f=open("Contact.txt","r+") 
    for i,j in enumerate(f): 
     text=str(f.readline()) 
     if text=="": 
      f.write('\n'+ name +" "+ family+" " + MPN +" "+ Add + "*") 

OR

f=open("Contact.txt","r+") 
text=str(f.read()) 
f.write('\n'+ name +" "+ family+" " + MPN +" "+ Add + "*") 
+0

我建议你为字符串连接使用['str.format'](https://docs.python.org/2/library/stdtypes.html#str.format)。 –

+1

'j'会连续包含'f'的每一行。没有必要在循环体中调用'f.readline()'。如果你这样做,'text'只能得到其他所有行; 'j'有其他的。 – chepner

+0

您是否试图将一些数据写入文件中的空行? –

回答

2

第一种方法是有点不对劲,当你遍历文件(即使使用枚举),它已经读取的行,你会得到它j,你不需要再次执行f.readline(),这会导致您的代码跳过备用行(除非您确实要跳过备用行)。

此外,两种方法都不会执行相同的操作,第一个方法是逐行读取文件,第二个完全读取文件并在最后写入换行符。

鉴于这是固定的,第一种方法占用的资源较少,因为您不会将完整的文件读入内存,而只需将每行读入内存,然后写入其他文件。

我可以建议的另一个改进是使用with语句来正确处理关闭文件。示例 -

with open("Contact.txt","r+") as f: 
    for i,text in enumerate(f): 
     if text=="": 
      f.write('\n'+ name +" "+ family+" " + MPN +" "+ Add + "*") 
2

我用这个:

f = open("Contact.txt","a") 
f.write('\n'+ name +" "+ family+" " + MPN +" "+ Add + "*") 
+1

也许你的意思是'open(“Contact.txt”,“a”)'? – Dunes

+0

是的,我的意思是,对不起 – svs

+0

你应该使用'with'语句关闭文件,你可以[用print()代替](http://stackoverflow.com/a/31905205​​/4279)。 – jfs

1

如果你只想要一个行添加到文件的末尾,最有效的是

with open("Contact.txt", "a") as f: 
    print("{} {} {} {} *".format(name, family, MPN, Add, file=f) 

打开文件在追加模式下自动启动文件末尾的文件点,而不需要通过文件显式读取来启动。 format方法创建一个单一的字符串,没有通过链接添加创建的所有中间字符串。

+0

这只是写入文件的简单练习。我正在寻找最理想的方式 – RezaOptic

2

如果你的目的是要在文件的最后添加联系人:

with open("Contact.txt", "a") as file: 
    print(name, family, MPN, Add + "*", file=file) 

print()功能插入空格,并在该行的自动结束的换行符。