在Python中,调用
temp = open(filename,'r').readlines()
产生一个列表,其中每个元素都是文件中的一行。这有点愚蠢,但是仍然:readlines()
还为每个元素写换行符,这是我不希望发生的事情。
如何避免呢?
您可以使用读取整个文件并分割行str.splitlines
:
temp = file.read().splitlines()
或者,您可以手动删除换行符:
temp = [line[:-1] for line in file]
注意:仅当文件以换行符结尾时,后一种解决方案才有效,否则最后一行将丢失字符。
在大多数情况下,此假设是正确的(尤其是对于文本编辑器创建的文件,这些文件通常确实会添加结尾换行符)。
如果要避免这种情况,可以在文件末尾添加换行符:
with open(the_file, 'r+') as f:
f.seek(-1, 2) # go at the end of the file
if f.read(1) != '\n':
# add missing newline if not already present
f.write('\n')
f.flush()
f.seek(0)
lines = [line[:-1] for line in f]
或更简单的替代方法是strip换行符:
[line.rstrip('\n') for line in file]
甚至,尽管很难理解:
[line[:-(line[-1] == '\n') or len(line)+1] for line in file]
它利用了以下事实:的返回值or不是布尔值,而是被评估为true或false的对象。
该readlines方法实际上等效于:
def readlines(self):
lines = []
for line in iter(self.readline, ''):
lines.append(line)
return lines
# or equivalently
def readlines(self):
lines = []
while True:
line = self.readline()
if not line:
break
lines.append(line)
return lines
因为readline()
保留换行符也readlines()
保留它。
注意:为了readlines()
使writelines()
方法对称,不会添加结尾换行符,因此f2.writelines(f.readlines())
会生成fin 的精确副本f2。
我已经使用读取和解析csv文件,列由分号分隔。一些文件在某些列之后有(出于未知原因)一个序列,这使得将它们拆分为不同的行。我想转义这些字符并将“第二行”附加到“第一行”,否则之后解析会变得困难。 我可以识别这些行,因为它们后面是数字,而正确的第一列包含时间,如00:00:00。熊猫有可能做到这一点吗。是否读取csv? 实例 如果文件正确,我的代码如下所示: 输出: 问题 如果文件已损坏,则如下所示
问题内容: 我想遍历整个文件的每一行。一种方法是读取整个文件,将其保存到列表中,然后遍历感兴趣的行。此方法占用大量内存,因此我正在寻找替代方法。 到目前为止,我的代码: 执行此代码将显示错误消息:。 有什么建议么? 目的是计算成对的字符串相似度,这意味着对于文件中的每一行,我要计算每隔一行的距离。 问题答案: 正确的,完全Python的读取文件的方法如下: 该with语句处理文件的打开和关闭,包括
问题内容: 在史前时代(Python 1.4)中,我们做到了: 在Python 2.1之后,我们做到了: 在Python 2.3中获得便利的迭代器协议之前,它可以做到: 我看过一些使用更详细的示例: 这是首选的方法吗? [edit]我知道with语句可以确保关闭文件…但是为什么文件对象的迭代器协议中没有包含该语句呢? 问题答案: 偏爱以下原因的确有一个原因: 我们都为CPython的相对确定性的引
我很难理解“文件结尾没有换行”到底是什么意思。 我有 错误指向最后一行 有人可以帮助向我解释为什么我会收到这个无效错误并提供解决它的解决方案。谢谢
问题内容: 我使用以下代码段在python中读取文件: 输入文件为: 当我打印数据时 如我所见,数据是list形式化的。如何将其制成字符串?而且我怎么删除以及从中字符? 问题答案: 你可以使用:
问题内容: 我正在尝试确定在Python中读取换行符分隔文件时处理换行符的最佳方法。 我想出的是以下代码,包括一次性代码以进行测试。 有什么建议吗? 问题答案: