如何使用 python 在文本文件中添加新行而不使用 \n

2024-01-08

我有一个包含文件列表的文件,但它添加了\n最后我怎样才能让python只在新行上写下我需要的信息而不得到\n这样我的信息就会被调用X.acc not x.acc\n?这是我写入文件的代码

def add(x):
    nl = "\n"
    acc = ".acc"
    xy = x + acc
    exyz = xy
    xyz = exyz
    xxx = str(xyz)
    tf = open('accounts.dat',"a+")
    tf.writelines(nl)
    tf.writelines(xxx)
    tf.close

这是调用该文件的代码:

import sys

tf = open('accounts.dat','r')
names = tf.readlines()




u = choicebox(msg="pick something",title = "Choose an account",choices=(names))


counter_file = open(u, 'r+')
content_lines = []

for line in counter_file:
    if line == "credits =":
        creds = line
    else:
        False


for line in counter_file:
        if 'credits =' in line:
                line_components = line.split('=')
                int_value = int(line_components[1]) + 1
                line_components[1] = str(int_value)
                updated_line= "=".join(line_components)
                content_lines.append(updated_line)
        else:
                msgbox(msg=(creds))
                content_lines.append(line)

counter_file.seek(0)
counter_file.truncate()
counter_file.writelines(content_lines)
counter_file.close()

感谢您的帮助,如果这是一个对 python 来说仍然陌生的小问题,我们深表歉意:)


你的问题实际上没有意义,因为“线”实际上是什么以及它是什么'\n'性格的意思。

文件没有内在的行概念。文件只是一个字节序列。'\n'是行分隔符(Python 用通用换行符表示)。如果您希望数据显示在不同的“行”上,您must在它们之间放置一个行分隔符。这就是全部'\n'性格是。如果您在编写文件后在文本编辑器中打开该文件,则大多数编辑器默认情况下不会显式显示换行符,因为它已经通过行分隔来表示。


分解你的代码在做什么,让我们看看add方法,并在此过程中修复一些问题。

第一件事add所做的就是命名一个名为nl并为其分配换行符。由此,我可以推测nl代表“换行符”,但如果它实际上是变量名,那就更好了。

接下来,我们将一个变量命名为acc并将其分配给'.acc'后缀,大概是用作文件扩展名之类的。

接下来,我们创建一个变量,名为xy并将其分配给x + acc. xy现在是一个字符串,尽管我不知道它包含变量名称中的内容。有了一些关于什么的知识x应该是或者这些线代表什么,也许我可以重命名xy去做一些更有意义的事情。

接下来的三行创建三个新变量,名为exyz, xyz, and xxx,并将它们全部指向同一个字符串xy参考。这些行中的任何一行都没有任何理由,因为它们的值并没有真正以有意义的方式使用。

现在,我们打开一个文件。美好的。或许tf代表“文件”? “文本文件”?同样,重命名将使代码更加友好。

现在,我们调用tf.writelines(nl). This 写入换行符 ('\n') 到文件。自从writelines方法旨在写入整个字符串列表,而不仅仅是单个字符,如果我们将此调用更改为tf.write(nl)。我还会更改此设置以在末尾写入换行符,而不是在开头写入,因此第一次写入文件时,它不会在前面插入空行。

接下来,我们调用writelines再次,使用我们的数据变量(xxx,但希望已重命名!)。这实际上做的是打破可迭代xxx(字符串)转换为其组成字符,然后将每个字符写入文件。最好将其替换为tf.write(xxx)以及。

最后,我们有tf.close,这是对close文件对象的功能。这是一个无操作,因为您可能的意思是通过调用以下方法来关闭文件:tf.close()。我们还可以将文件包装起来 http://effbot.org/zone/python-with-statement.htm as a 上下文管理器 http://docs.python.org/2/reference/datamodel.html#with-statement-context-managers,使其使用更加干净。另外,大多数变量不是必需的:我们可以使用字符串格式化 http://docs.python.org/2/library/string.html#string-formatting一步完成大部分工作。总而言之,您的方法最终可能如下所示:

def add(x):
    with open('accounts.dat',"a+") as output_file:
        output_file.write('{0}.acc\n'.format(x))

所以你可以看到,原因是'\n'出现在每行末尾是因为您在每行之间写入它。此外,这是正是你必须做的如果您希望这些行在文本编辑器中显示为“行”。如果没有换行符,所有内容都会显得粉碎在一起(取出'\n' in my add上面的方法你自己看看吧!)。


您在评论中描述的问题正在发生,因为names是直接读取文件。看着readlines文档 http://docs.python.org/2/tutorial/inputoutput.html#methods-of-file-objects,它返回文件中的行列表,在每个换行符处断开。因此,要清理这些名称,您需要发布代码的第 4 行来调用str.strip http://docs.python.org/2/library/stdtypes.html#str.strip在单独的线路上。你可以这样做:

names = tf.readlines()
for i in range(len(names)):
    names[i] = names[i].strip() # remove all the outside whitespace, including \n

然而,它是much更干净、更快并且通常更好地利用 Python列表推导式 http://carlgroner.me/Python/2011/11/09/An-Introduction-to-List-Comprehensions-in-Python.html,以及文件对象已经可以逐行迭代的事实。因此,下面的表达式与前一个表达式等效,但看起来更好:

names = [line.strip() for line in tf]
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用 python 在文本文件中添加新行而不使用 \n 的相关文章

随机推荐

  • 由于非 Ascii 字符,顶点着色器无法编译?

    因此 我开始使用 OpenGL 与 glew 和 GLFW 来创建游戏引擎 在开始使用着色器时我几乎立即遇到了问题 它们没有被使用或者即使被使用也没有任何效果 我一直在用大量其他示例检查我的代码 它们都匹配 没有任何看起来不合适的地方 我开
  • 访问控制允许来源语法

    我希望允许所有的跨源资源共享from example com 的子域 因此 我将如下所示的跨源资源共享标头添加到了页面中subdomain1 to example com
  • 如何将全部破坏限制为仅长单词?

    我正在尝试全部打破很长的单词 还有一些很长的uuid col在基于引导程序的模板中 但是当我对所有列使用以下样式时 它会破坏所有内容 在示例中检查不良破坏 即使单词正常换行的地方工作得很好 在示例中检查预期破坏 有没有办法我可以尽可能使用正
  • Webpack 无法加载字体(ttf)

    目前我有 3 种字体想要添加到我的 React 项目中 一个 一个光 一个大胆 我的文件结构 src fonts A ttf A light ttf A bold ttf styles base base scss styles scss
  • 限制对 C++ 中特定类的方法访问

    我有两个密切相关的类 我将其称为 Widget 和 Sprocket Sprocket 有一组方法 我希望可以从 Widget 调用它们 但不能从任何其他类调用它们 我也不想仅仅将 Widget 声明为 Spocket 的友元 因为这将使
  • 如何访问 OpenCV Matcher 上的点位置?

    我正在使用这个 FLANN 匹配器算法来匹配 2 张图片中的兴趣点 代码如下所示 有时代码会找到匹配点的列表 std vector
  • 向 Python 添加宏

    我想调用以下代码in situ无论我提到什么MY MACRO在我下面的代码中 MY MACRO frameinfo getframeinfo currentframe msg We are on file frameinfo filenam
  • 归并排序,递归部分

    研究了几天合并排序后 我从概念上理解了它 但有一点我不明白 我得到什么 1 它需要一个列表 例如一个数字数组 将其分成两半并对两半进行排序 最后将它们合并在一起 2 因为它是一种递归算法 所以它使用递归来做到这一点 因此 上述数组的分割如下
  • 自动代码签名 - 保护私钥

    我想要自动执行一些 ClickOnce 部署工件 应用程序 exe 和清单 的代码签名 我在用signtool http msdn microsoft com en us library windows desktop aa387764 2
  • Java 中前导零如何改变数字文字?

    我和我的朋友在看到它和答案后对Java中的这个说法感到困惑 这是如何运作的 System out printf d 077 等于63 077 is an octal number http en wikipedia org wiki Oct
  • 无法在舞台内跳过舞台

    我有一个阶段在一个阶段内 我想根据条件跳过它when pipeline agent any stages stage Dynamic stages steps script serverAStatus false def tests CLI
  • 如何判断一个对象的类?

    如果上课B和班级C扩展类A我有一个类型的对象B or C 我如何确定它是哪种类型的实例 if obj instanceof C your code
  • 我们是否可以在可能的情况下使用返回值优化,而在没有的情况下使用移动语义,而不是复制语义?

    是否可以编写 C 代码 在可能的情况下依赖返回值优化 RVO 而在不依赖返回值优化的情况下依赖移动语义 例如 以下代码由于条件原因无法使用 RVO 因此它将结果复制回来 include
  • 路由器链接不适用于共享模块内的组件

    我编写了一个名为 Customer 的模块 其中包含登录 主页和注册等多个组件 现在我创建了一个共享模块 它也有 2 个组件 例如页眉和页脚 由于页眉和页脚将由客户模块中的所有组件共享 因此我将它们放置在共享模块中 将共享模块导入到客户模块
  • Woocommerce Checkout 无法使用 WooCommerce 插件的无验证码 reCAPTCHA

    当我激活 No CAPTCHA reCAPTCHA for WooCommerce 插件时 因此在 WooCommerce 的结帐页面上 当客户检查 创建帐户 时复选框和下订单相比 它不起作用 页面只是滚动到顶部 没有任何操作 任何想法 问
  • 参考透明度

    当术语 不可观察 与函数式编程中的术语 引用透明 一起使用时 其含义是什么 您可能知道 术语 引用透明 意味着表达式的值只能依赖于values它的各个部分 而不是关于它们的任何其他事实 例如 它不能依赖于以下内容 表达式的某些部分是否已经被
  • 在Python中对嵌套列表数据进行排序

    我正在尝试对 python 3 8 5 中的嵌套列表进行排序 我有一个清单 例如 1 A 2 5 45 10 2 B 8 15 65 20 3 C 32 35 25 140 4 D 82 305 75 90 5 E 39 43 89 55
  • 如何添加图像以以编程方式查看?

    假设你有一个UIImage image and a UIView v 如何以编程方式在视图顶部显示图像 如果你只是想将 UIImage 添加到 UIView 中 那么你需要在 UIView 和 UIImage 之间添加一个 UIImageV
  • Symfony2:仅更新一个供应商包

    有没有一种方法可以只更新一个包而不更新 deps 文件中的每个包 我目前正在使用 php供应商安装 来安装所有供应商捆绑包 并且不知道有任何命令一次只更新一个捆绑包 1 只需打开你的 deps 文件 deps 2 删除除要更新的包之外的所有
  • 如何使用 python 在文本文件中添加新行而不使用 \n

    我有一个包含文件列表的文件 但它添加了 n最后我怎样才能让python只在新行上写下我需要的信息而不得到 n这样我的信息就会被调用X acc not x acc n 这是我写入文件的代码 def add x nl n acc acc xy