我正在开发一个简单的导入例程,它将文本文件转换为python中我们系统的json文件格式。
import json # Open text file for reading txtFile = open('Boating.Make.txt', 'r') # Create picklist obj picklistObj = dict() picklistObj['name'] = 'Boating.Make' picklistObj['items'] = list() i = 0 # Iterate through each make in text file for line in txtFile: picklistItemObj = dict() picklistItemObj['value'] = str(i) picklistItemObj['text'] = line.strip() picklistItemObj['selectable'] = True picklistObj['items'].append(picklistItemObj) i = i + 1 txtFile.close() picklistJson = json.dumps(picklistObj, indent=4) print picklistJson picklistFile = open('Boating.Make.json', 'w') picklistFile.write(picklistJson) picklistFile.close()
我的问题是,为什么我需要“条带”?我认为python应该神奇地知道我现在所处环境的换行常数。我错过了什么吗?
我应该澄清一下,我正在读取的文本文件是一个ASCII文件,其中包含分隔为'\ r \ n'的文本行。
答案 0 :(得分:3)
Python在枚举行时保留新行字符。例如,枚举文本文件(如
)时foo
bar
你得到两个字符串:"foo\n"
和"bar\n"
。如果您不想要终端换行符,请拨打strip()
。
顺便说一句,我不是这种行为的粉丝。
答案 1 :(得分:1)
见this。
Python通常使用通用构建 换行支持;提供'U'打开 该文件作为文本文件,但行可以 被以下任何一项终止: Unix的行尾约定'\ n', Macintosh约定'\ r',或 Windows约定'\ r \ n'
答案 2 :(得分:0)
你需要strip(),因为“for file in file:”将行终止符保留在行上。它没有在文档中明确说明(至少在我正在研究的2.71文档中)。但它的运行方式类似于file.readline(),它明确声明它保留了换行符。
答案 3 :(得分:0)
在Python解释器中尝试以下操作,以查看该语言的作用:
open('test1.txt', 'wb').write(b'Hello\nWorld!')
open('test2.txt', 'wb').write(b'Hello\r\nWorld!')
print(list(open('test1.txt'))) # Shows ['Hello\n', 'World!']
print(list(open('test2.txt'))) # Shows ['Hello\n', 'World!']
Python确实识别出正确的换行符。您可能希望改为编写strip
,而不是在字符串上使用myString.replace('\n', '')
。查看文档:
>>> help(str.strip)
Help on method_descriptor:
strip(...)
S.strip([chars]) -> str
Return a copy of the string S with leading and trailing
whitespace removed.
If chars is given and not None, remove characters in chars instead.
>>> help(str.replace)
Help on method_descriptor:
replace(...)
S.replace(old, new[, count]) -> str
Return a copy of S with all occurrences of substring
old replaced by new. If the optional argument count is
given, only the first count occurrences are replaced.