从python中的文本文件中读取行(windows)

时间:2011-06-03 16:27:52

标签: python windows json io

我正在开发一个简单的导入例程,它将文本文件转换为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'的文本行。

4 个答案:

答案 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.