【问题标题】:cannot write a list of integers, which were made strings to a text file无法将整数列表写入文本文件
【发布时间】:2015-12-11 15:00:37
【问题描述】:

您好,我正在以“infile”和“outfile”的形式打开和关闭输入和输出文件,并在命令行参数中使用它们将特定内容从一个文件提取到另一个文件。然而,infile 内容是一个整数列表,据我所知,我必须将它们转换为字符串才能完成任务......

for lines in infile:
    words=lines.split("\t")
    wated=words[15]
    if wated == "559292":
        dataA.append(str(words[1]))#attempt to write list of integers as strings to file
    outfile.write(dataA+'n')#'+n' apparently needed for this process.

但是我不断收到错误:

TypeError:can only concatenate list (not "str") to list

当我尝试不带“+'n'”时:

TypeError: expected a character buffer object

【问题讨论】:

  • 第一个错误正是错误信息所说的;您不能添加列表和字符串。第二条错误信息:write 接受一个字符串;您正在向它传递一个列表。
  • 也许dataA 是一个列表?

标签: python list filehandle


【解决方案1】:

如果您想将该列表存储在文件中,请更改为:

....
outfile.write(str(dataA)+'n')#'+n' apparently needed for this process.
....

【讨论】:

  • 这在技术上可行,但我认为这不是他真正想要的,因为对于 N 行的输入文件,你输出一个包含 0 到 N 个元素的列表,N 次,对于总共 O(N^2)。如果输入文件约为 1 千字节,则输出文件将有几兆字节。
【解决方案2】:

我假设您只希望每个 words[1] 值在输出文件中出现一次,在这种情况下您可以执行以下操作之一:

  • 不要为列表而烦恼;只需将words[1] 直接写入文件即可
  • 等到循环结束后再将列表写入文件

您当前的方法似乎是上述选择的混合,这是不好的。我还假设当您添加“n”时,您实际上是在尝试添加换行符。

for lines in infile:
  words=lines.split("\t")
  wated=words[15]
  if wated == "559292":
    outfile.write(str(words[1])+'\n')

或者

for lines in infile:
  words=lines.split("\t")
  wated=words[15]
  if wated == "559292":
    dataA.append(str(words[1])+'\n')
outfile.writelines(dataA)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-06-12
    • 1970-01-01
    • 1970-01-01
    • 2013-09-19
    • 2017-11-06
    • 1970-01-01
    • 2017-09-27
    相关资源
    最近更新 更多