为什么这个分裂不起作用?

时间:2016-04-10 20:32:47

标签: python text-files

为什么这种分裂不起作用?当我运行代码split_1时,不打印。

with open ('r_3exp', 'a+') as file_1:
 choice = input ('1 (write) or 2? ')
 number = input ('What number?')

 if choice == '1':
    file_1.write ('\n') 
    file_1.write ('Here are some numbers : 1233 8989' + ' ' + number)
 else:
    for line in file_1:
        split_1 = line.split (":")
        print (split_1)

1 个答案:

答案 0 :(得分:2)

这是因为您要以MPNowPlayingInfoCenter模式打开文件。

a+允许 读取和附加到文件。从表面上看,这听起来非常适合您的需求。但是,你有一些关于这种模式的细微技巧:

  • A file opened in a+ is automatically opened at the end of the file。换句话说,您不再从文件的开头读取,而是从它的最后开始。

  • 因此,当您执行a+时,您实际上开始从文件最末端的字符中读取。因为根据定义,没有任何内容,for line in file_1返回一个空字符串,line也是空的。

要解决此问题,请稍微重新组织您的代码以使用 line.split(':')模式或r模式更为谨慎:

a

choice = input("1 (write) or 2? ") if choice == "1": number = input("What number? ") with open("r_3exp","a") as file_1: file_1.write ('\n') file_1.write ('Here are some numbers : 1233 8989' + ' ' + number) elif choice == "2": with open("r_3exp","r") as file_1: for line in file_1: split_1 = line.split (":") print (split_1) 打开你的文件,开始从文件的第一个字符开始读取,而不是从最后一个字符开始读取。

我仍然会为使用Python 2.7的人推荐上述代码,但还有一个警告:r在Python 2.7中返回input(),因为它实际上评估作为Python命令的输入。在Python 2.7中使用的正确函数是None,它正确返回一个字符串。