【问题标题】:"OSError: [Errno 36] File name too long" while opening a text file打开文本文件时出现“OSError:[Errno 36] 文件名太长”
【发布时间】:2019-06-25 06:47:57
【问题描述】:

我正在尝试用新号码替换文本文件中已有的号码。我打开了文件,我打开的文件名很短:“example_Na.chem”,但我仍然收到错误消息:OSError: [Errno 36] File name too long”。

我使用的代码是:

filename_chem = open('./input/example_Na/example_Na.chem', 'r').read()
input_file_chem = filename_chem.format(albeitSSA=albeitSSA)
    with open(filename_chem, 'w') as fid:
        fid.write(input_file_chem)



【问题讨论】:

  • 首先,它与您运行的操作系统有关,因为这决定了文件名的最大长度。其次,文件名长度包括完整的路径名,所以/input/example_Na/example_Na.chem是文件名的全部部分。
  • 你在什么操作系统上做这个?
  • 您好,感谢您回答问题。 @JGFMK 我正在使用 Linux 16.04。
  • @Ken White 但我认为问题在于文件的内容。这是一个很长的文本文件。出错后,打印出文本文件的内容。
  • 文本文件的内容不会导致文件名过长错误。文件太大会导致内存不足错误。阅读错误信息中的文字。

标签: python python-3.x


【解决方案1】:

您正在读取文件./input/example_Na/example_Na.chem 的内容,然后将文件内容用作回写的文件名,这对于文件名来说可能太大了。如果您打算将格式化的内容写回同一个文件,您应该打开相同的文件名进行写入:

filename_chem = open('./input/example_Na/example_Na.chem', 'r').read()
input_file_chem = filename_chem.format(albeitSSA=albeitSSA)
with open('./input/example_Na/example_Na.chem', 'w') as fid:
    fid.write(input_file_chem)

【讨论】:

  • 不错的收获 - 我错过了。 :-)
  • 啊,我明白了。谢谢。我该如何解决这个问题?
  • @Leila 您可以打开与读取文件名相同的文件名进行写入,就像我在上面的代码中向您展示的那样。
  • @blhsing 非常感谢。这解决了问题。很抱歉,我是新用户,我无法为您的 cmets 投票。但它们真的很有用。谢谢。 :-)
  • 我还是有问题。我在“example_Na.chem”中定义了一个字典,并为“albeitSSA”定义了 100 个值。我以这种方式编写代码来打开“example_Na.chem”,替换 albeitSSA 的第一个值,在代码中调用模型并运行它,然后替换“example_Na.chem”中的第二个值 albeitSSA。当我使用您的方法时,“albeitSSA”的第一个值将替换为我在“example_Na.chem”中定义的字典,并且它不会进入第二步来替换第二个值。因为它会覆盖文件!请告诉我如何解决这个问题?
猜你喜欢
  • 2015-07-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-04-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-03-07
相关资源
最近更新 更多