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

Posted

技术标签:

【中文标题】从python中的文本文件中读取行(windows)【英文标题】:Reading lines from text file in python (windows) 【发布时间】:2011-09-07 23:09:09 【问题描述】:

我正在研究一个简单的导入例程,它将文本文件转换为我们系统的 json 文件格式。

导入json # 打开文本文件进行阅读 txtFile = open('Boating.Make.txt', 'r') # 创建选择列表 obj picklistObj = dict() picklistObj['name'] = 'Boating.Make' picklistObj['items'] = list() 我 = 0 # 遍历文本文件中的每个make 对于 txtFile 中的行: picklistItemObj = dict() picklistItemObj['value'] = str(i) picklistItemObj['text'] = line.strip() picklistItemObj['selectable'] = True picklistObj['items'].append(picklistItemObj) 我 = 我 + 1 txtFile.close() picklistJson = json.dumps(picklistObj, indent=4) 打印选择列表Json picklistFile = open('Boating.Make.json', 'w') picklistFile.write(picklistJson) 选择列表文件.close()

我的问题是,为什么我需要“条”?我认为 python 应该神奇地知道我当前所处的任何环境的换行符常量。我错过了什么吗?

我应该澄清一下,我正在读取的文本文件是一个 ASCII 文件,其中包含以“\r\n”分隔的文本行。

【问题讨论】:

【参考方案1】:

Python 在枚举行时保留换行符。例如,当枚举一个文本文件时,如

foo
bar

你会得到两个字符串:"foo\n""bar\n"。如果您不想要终端换行符,请致电strip()

顺便说一句,我不喜欢这种行为。

【讨论】:

看来你是对的。如果我使用'U'显式地将文件作为文本打开并不重要,行为是相同的。这似乎与“通用换行符”的心态不符。【参考方案2】:

见this。

Python 通常是用通用构建的 换行支持;供应“U”打开 文件作为文本文件,但行可能 被以下任何一种终止: Unix 行尾约定 '\n', Macintosh 约定 '\r',或 Windows 约定“\r\n”

【讨论】:

在读取文件时,显然将“U”附加到文件打开模式不会传递到迭代器(for 语句)。将我的文件打开模式修改为“rU”并没有什么不同。【参考方案3】:

您需要 strip() 因为“for line in file:”将行终止符保留在行上。文档中没有明确说明(至少在我正在查看的 2.71 文档中)。但它的功能类似于 file.readline(),后者明确声明它保留换行符。

【讨论】:

【参考方案4】:

在 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.

【讨论】:

如上所述,调用 strip 和 replace 之间实际上没有区别。 如果行的开头和结尾有空格需要保留,strip 不足以保证数据完整性。如果您正在阅读行,那么如果保留前导和尾随空格对您很重要,您可能至少需要致电 myString.strip('\n')

以上是关于从python中的文本文件中读取行(windows)的主要内容,如果未能解决你的问题,请参考以下文章

从 C# 中的文本文件一次读取 10 行

如何用VBS逐行读取文本文件的内容,并输入变量

如何从 C++ 中的文本文件中逐行读取整数? [复制]

读取文本文件时,Python可以从字符串中删除双引号吗?

为什么python无法读取环境变量并且无法运行Windows命令行?

在python中逐行读取一个大的压缩文本文件