【问题标题】:python write(string) saves normally but sometimes it saves as a list of characterspython write(string) 正常保存,但有时会保存为字符列表
【发布时间】:2022-01-21 22:10:15
【问题描述】:

我有以下将字符串保存到文件的简单函数:

def writeFile(path, data):
    with open(path, mode = 'wt', encoding="utf-8") as file:
        file.write("".join(data))
        file.close()

我尝试使用 file.write(data),然后将 data 替换为 "".join(data) 但它没有改变任何东西。大多数情况下,字符串是正常保存的,但有时,它会保存为字符列表,这意味着字符串的每个字符都用 \n 分隔,我不明白为什么。

【问题讨论】:

  • 您发布的代码不会添加换行符,这一定是在调用者中发生的。
  • 您应该提供一个可重现的例子来说明发生这种情况的情况。
  • 你的代码有点别扭。如果data 是一个字符串,那么"".join(data) 会将其分解为字符,然后将其重新组合成原始字符串。您的原始数据必须包含换行符。
  • 您不需要使用file.close。上下文管理器会自动关闭文件。

标签: python string


【解决方案1】:

这里发生了几件事:

首先,"".join(data) 不会更改字符串 - 它将data 分解为字符,然后将其重新组合成原始字符串。因此,导致您的问题的换行符 - 在原始字符串中。

其次,由于您使用的是上下文管理器,因此无需使用file.close - 上下文管理器会自动关闭文件。

【讨论】:

  • 这是发送到 writeFile() 的字符串:“过去 6 小时:0.00 NM (0.00 kt) 过去 6 小时:没有足够的数据 最近 12 小时:没有足够的数据 最近 24 小时:没有足够的数据”
  • with open 部分的开头添加print("\n" in data)。如果你得到True,这意味着数据至少包含一个换行符。要从字符串中删除换行符,可以使用 data = data.rstrip()
  • 是的,这个字符串正好包含 3 个换行符(一些文本\n一些文本\n一些文本\n一些文本),是否可以将带有换行符的字符串保存为一个文本块,因为我需要这个字符串中的换行符?
  • 您可以使用data.splitlines() 用换行符分割字符串。这将返回data 中的行列表,在行边界处中断。结果列表中不包含换行符。当您需要字符串包含它时,您可以稍后将换行符添加到每一行。
  • 您实际上可以添加参数keepends=True 以保留换行符,因此data = data.splitlines(keepends=True) 将为您提供行列表,其中每行末尾都包含换行符。
【解决方案2】:

感谢您的支持,我制作了一个将列表转换为字符串的新函数

def listToString(aList):
    retStr = lf = ""
    for element in aList:
        retStr = f"{retStr}{lf}{element}"
        lf = "\n"
    return retStr

def writeFile(path, data):
    with open(path, mode = 'wt', encoding="utf-8") as file:
        file.write(data)

data = ["12","34","45","..."]
writeFile("data.txt", listToString(data))

【讨论】:

  • 如果我的回答回答了您的问题,请考虑将其标记为已接受的答案。谢谢
猜你喜欢
  • 2012-06-26
  • 1970-01-01
  • 2017-04-11
  • 2016-11-08
  • 2021-01-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多