天道酬勤,学无止境

Newline "\n" not Working when Writing a .txt file Python

问题
for word in keys:
    out.write(word+" "+str(dictionary[word])+"\n")
    out=open("alice2.txt", "r")
    out.read()

出于某种原因,python 不是为字典中的每个单词都换行,而是在每个键和值之间打印 \n。 我什至尝试过单独写新行,像这样......

for word in keys:
    out.write(word+" "+str(dictionary[word]))
    out.write("\n")
    out=open("alice2.txt", "r")
    out.read()

我该怎么办?

回答1

假设你这样做:

>>> with open('/tmp/file', 'w') as f:
...    for i in range(10):
...       f.write("Line {}\n".format(i))
... 

然后你做:

>>> with open('/tmp/file') as f:
...    f.read()
... 
'Line 0\nLine 1\nLine 2\nLine 3\nLine 4\nLine 5\nLine 6\nLine 7\nLine 8\nLine 9\n'

看来Python 刚刚在文件中写入了文字\n 。 它没有。 转到终端:

$ cat /tmp/file
Line 0
Line 1
Line 2
Line 3
Line 4
Line 5
Line 6
Line 7
Line 8
Line 9

Python 解释器向您显示不可见的\n字符。 该文件很好(在这种情况下无论如何......)终端正在显示字符串的 __repr__ 。 您可以print字符串以查看解释的特殊字符:

>>> s='Line 1\n\tLine 2\n\n\t\tLine3'
>>> s
'Line 1\n\tLine 2\n\n\t\tLine3'
>>> print s
Line 1
    Line 2

        Line3

请注意我如何打开和(自动)关闭文件with

with open(file_name, 'w') as f:
  # do something with a write only file
# file is closed at the end of the block

在您的示例中,您正在混合打开一个文件以同时读取和写入。 如果你这样做,你会混淆自己或操作系统。 要么使用open(fn, 'r+')要么首先写入文件,关闭它,然后重新打开读取。 最好使用with块,这样关闭是自动的。

受限制的 HTML

  • 允许的HTML标签:<a href hreflang> <em> <strong> <cite> <blockquote cite> <code> <ul type> <ol start type> <li> <dl> <dt> <dd> <h2 id> <h3 id> <h4 id> <h5 id> <h6 id>
  • 自动断行和分段。
  • 网页和电子邮件地址自动转换为链接。

相关推荐
  • Newline "\n" not Working when Writing a .txt file Python
    for word in keys: out.write(word+" "+str(dictionary[word])+"\n") out=open("alice2.txt", "r") out.read() For some reason, instead of getting a new line for every word in the dictionary, python is literally printing \n between every key and value. I have even tried to write new line separately, like this... for word in keys: out.write(word+" "+str(dictionary[word])) out.write("\n") out=open("alice2.txt", "r") out.read() What do I do?
  • Python I/O(读写)详解 [文件路径][绝对路径][相对路径][打开指定文件][读写文件][关闭指定文件]
    您的“关注”和“点赞”,是信任,是认可,是支持,是动力… 如意见相佐,可留言。 本人必将竭尽全力试图做到准确和全面,终其一生进行修改补充更新。 文章目录 1 Python 文件路径1.1 文件路径概述1.2 绝对路径和相对路径 2 Python 文件的基本操作2.1 文件基本操作概述2.2 打开指定文件2.3 对文件做 I/O (读写)操作(1)读取文件中的数据。Python read() 函数:逐个字节或者字符读取文件中的内容Python readline() 函数:逐行读取文件中的内容Python readlines() 函数:一次性读取文件中多行内容 (2)向文件中写入数据Python write() 函数Python writelines() 函数 2.4 关闭指定文件 【友情链接】微信公众号:码农阿杰博客园 【参考资料】[Python 官网](https://www.python.org/)[Python 3.8.2 documentation](https://docs.python.org/release/3.8.2/) 1 Python 文件路径 1.1 文件路径概述 程序运行,数据传递,数据都是暂时存储在变量、序列以及对象中的,程序结束,数据就丢失了。 为了在程序结束后数据仍然存在,就需要将数据保存到文件中。 Python 提供了内置的文件对象,以及对文件、目录
  • 读取文件时不要转换换行符(Don't convert newline when reading a file)
    问题 我正在阅读一个文本文件: f = open('data.txt') data = f.read() 然而, data变量中的换行符被规范化为 LF ('\n'),而文件包含 CRLF ('\r\n')。 如何指示 Python 按原样读取文件? 回答1 在 Python 2.x 中: f = open('data.txt', 'rb') 正如文档所说: 默认是使用文本模式,它可以在写入和读取时将 '\n' 字符转换为特定于平台的表示形式。 因此,打开二进制文件时,应在模式值后附加'b'以二进制模式打开文件,这将提高可移植性。 (即使在不以不同方式对待二进制文件和文本文件的系统上,附加'b'也很有用,它用作文档。) 在 Python 3.x 中,有三种选择: f1 = open('data.txt', 'rb') 这将使换行符未转换,但也会返回bytes而不是str ,您必须自己显式decode为 Unicode。 (当然,如果您想要 Unicode,2.x 版本也返回必须手动解码的字节,但在 2.x 中这就是str对象;在 3.x 中str是 Unicode。) f2 = open('data.txt', 'r', newline='') 这将返回str ,并保留未翻译的换行符。 然而,与 2.x 等价物不同, readline和朋友会将'\r\n'视为换行¬
  • 将行附加到现有文件中,在 Python 中具有额外的新行(Appending line to a existing file having extra new line in Python)
    问题 我有一个文本文件 apple banana 现在你仔细观察最后有空行。 什么时候追加 f = open("file.txt",'a') f.write("orange") f.close() 我得到输出: apple banana orange 我想在追加期间删除中间的空行。 我知道我可以手动转到文件并删除额外的新行。 但我想用python来做。 因此,每次出现空行时,它都会像这样自动删除: apple banana orange 我搜索并尝试过但无济于事 回答1 你不能,因为,追加模式正是这样做的:它追加。 到换行符。 您必须读入文件,删除末尾的换行符,将其写出然后追加。 或者,打开文件进行读写(模式'r+' ),查找到末尾,删除换行符,然后继续写入。 我认为这可以解决问题: f = open('file.txt', 'r+') f.seek(-2, 2) # last character in file if f.read(2) == '\n\n': f.seek(-1, 1) # wow, we really did find a newline! rewind again! f.write('orange') f.close() 回答2 用: f = open("file.txt",'ab') 'ab' 而不是只有 'a' 回答3
  • 在 Python 中将元组列表写入文本文件(Writing a list of tuples to a text file in Python)
    问题 我有一个格式的元组列表: ("some string", "string symbol", some number) 例如, ("Apples", "=", 10) 。 我需要将它们写入输出文件,如下所示: Apples = 10 我在使用 write 方法时遇到了问题。 怎么做到呢? 回答1 您可以使用: for t in some_list: f.write(' '.join(str(s) for s in t) + '\n') 其中f是您的file 。 回答2 list_of_tuples = [('Apples', '=', 10), ('Oranges', '<', 20)] f = open('file.txt', 'w') for t in list_of_tuples: line = ' '.join(str(x) for x in t) f.write(line + '\n') f.close() 给定一个元组列表,您以写入模式打开一个文件。 对于列表中的每个元组,您将其所有元素转换为字符串,用空格将它们连接起来形成字符串,然后将带有新行的字符串写入文件。 然后关闭文件。 编辑:没有意识到您从元组列表开始。 进行了更改以反映这一点。 回答3 >>> data= ("Apples", "=", 10) >>> print " ".join(map(str
  • 每次将字符串写入文件的新行(Writing string to a file on a new line every time)
    问题 每次调用file.write()时,我file.write()字符串中附加一个换行符。 在 Python 中执行此操作的最简单方法是什么? 回答1 使用“\n”: file.write("My String\n") 请参阅 Python 手册以供参考。 回答2 您可以通过两种方式执行此操作: f.write("text to write\n") 或者,取决于您的 Python 版本(2 或 3): print >>f, "text to write" # Python 2.x print("text to write", file=f) # Python 3.x 回答3 您可以使用: file.write(your_string + '\n') 回答4 如果你广泛使用它(很多书面的行),你可以子类化“文件”: class cfile(file): #subclass file to have a more convienient use of writeline def __init__(self, name, mode = 'r'): self = file.__init__(self, name, mode) def wl(self, string): self.writelines(string + '\n') 现在它提供了一个额外的功能 wl 可以做你想要的: fid
  • Add newline to string, cross-platform
    问题 我正在我的应用程序中生成一些文本。 由于文本是更大信息的一部分,有时我需要添加换行符,有时不需要: NEWLINE = '\n' # TODO: how to define this cross-platform? Can I use os.linesep? def get_txt(add_newline=False): txt = 'Hello' if add_newline: txt += NEWLINE return txt 这可以按如下方式使用: def get_message(): msg = get_txt(True) msg += get_txt(True) msg += get_txt(False) return msg 哪个会返回: Hello Hello Hello (no newline here) 如何以跨平台的方式定义NEWLINE ? 或者更好的是,标准库(或包含在 python 中)中是否有一个函数可以将换行符附加到字符串? (不一定在打印时,只需在内存中的字符串附加一个换行符)。 如果 python 正在运行,使用的换行符应该是适合平台的换行符 回答1 import os print(os.linesep) 回答2 回答3 Python使用\n表示换行符。 Python会根据平台自动将\n转换为正确的换行符。 你也可以试试 import os
  • python - 文件目录操作 之 file文件读写 - txt文件
    目录 1.文本文档函数 2.open函数 3.WITH OPEN 1.文本文档函数 file.close() 关闭文件file.flush() 刷新文件内部缓冲,即立刻把缓冲区的数据立刻写入文件。file.fileno() 返回整型的文件描述符。file.isatty() 如果文件连接到一个终端设备返回 True,否则返回 False。file.next() 返回文件下一行。file.read([size]) 从文件读取指定的字节数,如果未给定或为负则读取所有。file.readline([size]) 读取整行,包括 "\n" 字符。file.readlines([sizehint]) 读取所有行并返回列表。file.seek(offset[, whence]) 设置文件当前位置file.tell() 返回文件当前位置。file.truncate([size]) 截取文件,size指定截取位置。file.write(str) 将字符串写入文件,没有返回值。file.writelines(sequence) 向文件写入字符串列表,需换行则要加入每行的换行符。file.name() 读取打开的文件名 2.open函数 (1)open语法参数 open()函数语法格式为:open(file, mode, buffering, encoding, errors, newline
  • 如何检测文件中的 DOS 换行符?(How can I detect DOS line breaks in a file?)
    问题
  • 在r和rb模式下解析文本文件之间的区别(Difference between parsing a text file in r and rb mode)
    问题 是什么让在“ r”模式下解析文本文件比在“ rb”模式下解析文本文件更方便? 特别是当有问题的文本文件可能包含非ASCII字符时。 回答1 这一点取决于您所使用的Python版本。 在Python 2中,Chris Drappier的答案适用。 在Python 3中,它是一个不同的(并且更加一致)的故事:在文本模式( 'r' )中,Python会根据您提供的文本编码来解析该文件(或者,如果不提供,则使用一个平台,取决于默认值),而read()将为您提供str 。 在二进制( 'rb' )模式下,Python不假定该文件包含可以合理地解析为字符的内容,而read()给您提供了一个bytes对象。 另外,在Python 3中,通用换行符(在'\n'和特定于平台的换行符之间进行转换,因此您不必关心它们)可在任何平台上用于文本模式文件,而不仅仅是Windows。 回答2 从文档中: 在Windows上,附加到模式的'b'以二进制模式打开文件,因此也有'rb','wb'和'r + b'之类的模式。 Windows上的Python区分文本文件和二进制文件。 读取或写入数据时,文本文件中的行尾字符会自动更改。 对于ASCII文本文件来说,对文件数据进行这种幕后修改是可以的,但是它会破坏JPEG或EXE文件中的二进制数据。 读写此类文件时,请务必小心使用二进制模式。 在Unix上,将'b
  • Python文件操作(I/O)
    Python文件操作(I/O)和其它编程语言一样,Python 也具有操作文件(I/O)的能力,比如打开文件、读取和追加数据、插入和删除数据、关闭文件、删除文件等。 除了提供文件操作基本的函数之外,Python 还提供了很多模块,例如 fileinput 模块、pathlib 模块等,通过引入这些模块,我们可以获得大量实现文件操作可用的函数和方法(类属性和类方法),大大提供编写代码的效率。 文章内容 1. 什么是文件路径,Python中如何书写文件路径?2. Python绝对路径和相对路径详解1.1 什么是绝对路径与相对路径1.2 Python处理绝对路径和相对路径 3.Python文件基本操作(入门必读)4.Python `open()`函数详解:打开指定文件4.1 `open()`是否需要缓冲区4.2 `open()`文件对象常用的属性 5. 以文本格式和二进制格式打开文件,到底有什么区别?6.Python `read()`函数:按字节(字符)读取文件6.1 Python read()函数6.2 `read()`函数抛出`UnicodeDecodeError`异常的解决方法 7.Python `readline()`和`readlines()`函数:按行读取文件7.1 Python `readline()`函数7.2 Python `readlines()`函数 8
  • 用Python写换行符时避免写回车'\r'(Avoid writing carriage return '\r' when writing line feed with Python)
    问题 如果考虑到carriage return = \r和line feed = \n Python 3.5.1 (v3.5.1:37a07cee5969, Dec 6 2015, 01:38:48) [MSC v.1900 32 bit (Intel)] on win32 Type "help", "copyright", "credits" or "license" for more information. >>> '{:02x}'.format(ord('\n')) '0a' >>> '{:02x}'.format(ord('\r')) '0d' 使用open('filename','w').write('text\n')时如何避免写回车? 在交互模式下,您可以执行以下操作: >>> open('filename','w').write('text\n') 5 >>> for c in open('filename','r').read(): ... print('{:02x}'.format(ord(c))) ... 74 65 78 74 0a 这表示只写入了换行符,因此它应该是 5 个字节长。 -rw-r--r-- 1 djuric 197121 6 Jul 15 21:00 filename ^ 它实际上是 6 个字节长。 现在这可能是一个“Windows 的东西”
  • Python file writing is not working inside docker
    I'm a trying to dockerize a python script in which file writing of a text file and CSV file is there. but it is not working, the file is not getting generated. For reference my code is FROM python:3 ADD ./HMS.py / ADD ./constants.py / ADD ./Docker.py / ADD ./SNT.py / ADD ./Utility.py / RUN pip install --trusted-host pypi.org --trusted-host files.pythonhosted.org docker RUN pip install --trusted-host pypi.org --trusted-host files.pythonhosted.org grepfunc RUN pip install --trusted-host pypi.org --trusted-host files.pythonhosted.org requests CMD [ "python", "./HMS.py" ] However, when I run the
  • 如何删除 ^M(How to remove ^M)
    问题
  • 如何在Windows中编写Unix行尾字符?(How to write Unix end of line characters in Windows?)
    问题 如何使用Python(在Windows上)写入文件并使用Unix行尾字符? 例如: f = open('file.txt', 'w') f.write('hello\n') f.close() Python自动将\n替换为\r\n 。 回答1 对于Python 2和3 请参阅:现代方式:在此页面上使用newline =''答案。 仅适用于Python 2(原始答案) 以二进制形式打开文件,以防止转换行尾字符: f = open('file.txt', 'wb') 引用Python手册: 在Windows上,附加到模式的'b'以二进制模式打开文件,因此也有'rb','wb'和'r + b'之类的模式。 Windows上的Python区分文本文件和二进制文件。 当读取或写入数据时,文本文件中的行尾字符会自动更改。 对于ASCII文本文件来说,对文件数据进行这种幕后修改是可以的,但它会破坏JPEG或EXE文件中的二进制数据。 读写此类文件时,请务必小心使用二进制模式。 在Unix上,将'b'附加到该模式并没有什么坏处,因此您可以在平台上独立地将其用于所有二进制文件。 回答2 现代方式:使用newline ='' 使用io.open()的newline=关键字参数可以使用Unix风格的LF行尾终止符: import io f = io.open('file.txt', 'w'
  • Python在输出中添加了额外的换行符(Python is adding extra newline to the output)
    问题 输入文件: a.txt aaaaaaaaaaaa bbbbbbbbbbb cccccccccccc python代码: with open("a.txt") as f: for line in f: print line 问题: [root@a1 0]# python read_lines.wsgi aaaaaaaaaaaa bbbbbbbbbbb cccccccccccc 如您所见,输出在每个项目之间都有多余的行。 如何预防呢? 回答1 print追加一个换行符,并且输入行已经以换行符结尾。 一个标准的解决方案是逐字输出输入行: import sys with open("a.txt") as f: for line in f: sys.stdout.write(line) PS :对于Python 3(或具有print功能的Python 2),abarnert的print(…, end='')解决方案是最简单的解决方案。 回答2 正如其他答案所解释的那样,每行都有一个换行符。 当您print裸露的字符串时,它会在末尾添加一行。 有两种解决方法: 其他所有东西都是相同的两个想法的变体。 首先,您可以在阅读换行符时将其删除: with open("a.txt") as f: for line in f: print line.rstrip() 这将删除所有其他尾随空格
  • 使用 Python codecs.write 编写换行符(Writing newline with Python codecs.write)
    问题 f = codecs.open('import.txt', 'w', 'utf-8') for x in list: string = "Hello" f.write(string+'\n') f.close() 由于某种原因,此代码不会将换行符写入文件,就像我使用open函数而不是codecs.open时那样。 我该如何解决这个问题? 回答1 codecs.open() 不能正确处理换行符('U' 模式已弃用): 底层编码文件始终以二进制模式打开。 读写时不会自动转换 '\n'。 请改用内置open()函数。 如果您希望相同的代码在同一来源的 Python 2 和 3 上工作; 你可以使用 io.open()。 回答2 不知道你在说什么......还向你展示了如何拥有一个完整的可运行示例 >>> import codecs >>> f = codecs.open('import.txt', 'w', 'utf-8') >>> f.write("hello\nworld\n") >>> f.close() >>> print repr(open("import.txt").read()) 'hello\nworld\n' >>> 根据评论,真正的答案是 不要使用记事本
  • 如何将新数据追加到新行(How to append new data onto a new line)
    问题 我的代码如下所示: def storescores(): hs = open("hst.txt","a") hs.write(name) hs.close() 因此,如果我运行它并输入“ Ryan”,然后再次运行它并输入“ Bob”,则文件hst.txt看起来像 RyanBob 代替 Ryan Bob 我该如何解决? 回答1 如果需要换行符,则必须显式地编写一个换行符。 通常的方式是这样的: hs.write(name + "\n") 它使用反斜杠转义\n ,Python将其转换为字符串文字中的换行符。 它只是将您的字符串, name和该换行符连接成一个更大的字符串,然后将其写入文件。 也可以改用多行字符串文字,如下所示: """ """ 或者,您可能希望使用字符串格式而不是串联: hs.write("{}\n".format(name)) 所有这些都在本教程的“输入和输出”一章中进行了说明。 回答2 所有答案似乎都可以正常工作。 如果您需要多次执行此操作,请注意编写 hs.write(name + "\n") 在内存中构造一个新字符串,并将其附加到文件中。 更有效率的是 hs.write(name) hs.write("\n") 它不会创建新的字符串,而只是追加到文件中。 回答3 在Python> = 3.6中,您可以使用新的字符串文字功能: with open('hst
  • python之文件与文件系统
    1. 文件与文件系统 1.1 打开文件 open(file, mode='r', buffering=None, encoding=None, errors=None, newline=None, closefd=True) Open file and return a stream. Raise OSError upon failure. file: 必需,文件路径(相对或者绝对路径)。mode: 可选,文件打开模式buffering: 设置缓冲encoding: 一般使用utf8errors: 报错级别newline: 区分换行符 常见的mode如下表所示: 打开模式执行操作‘r’以只读方式打开文件。文件的指针将会放在文件的开头。这是默认模式。‘w’打开一个文件只用于写入。如果该文件已存在则打开文件,并从开头开始编辑。即原有内容会被删除。如果该文件不存在,创建新文件。‘x’写模式,新建一个文件,如果该文件已存在则会报错。‘a’追加模式,打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。‘b’以二进制模式打开文件。一般用于非文本文件,如:图片。‘t’以文本模式打开(默认)。一般用于文本文件,如:txt。‘+’可读写模式(可添加到其它模式中使用) 【例】打开一个文件,并返回文件对象
  • Python文件写入在docker内部不起作用(Python file writing is not working inside docker)
    问题 我正在尝试对 python 脚本进行 dockerize,其中存在文本文件和 CSV 文件的文件写入。 但它不起作用,文件没有生成。 作为参考,我的代码是 FROM python:3 ADD ./HMS.py / ADD ./constants.py / ADD ./Docker.py / ADD ./SNT.py / ADD ./Utility.py / RUN pip install --trusted-host pypi.org --trusted-host files.pythonhosted.org docker RUN pip install --trusted-host pypi.org --trusted-host files.pythonhosted.org grepfunc RUN pip install --trusted-host pypi.org --trusted-host files.pythonhosted.org requests CMD [ "python", "./HMS.py" ] 但是,当我在外面运行 python 脚本时,我能够生成文件。 我可以知道为什么它没有在工作目录中生成。 更新 def write_log(self, filename, message, type='info'): with open(filename,