【问题标题】:Odd character popping up when writing to a file写入文件时弹出奇怪的字符
【发布时间】:2016-08-08 09:23:19
【问题描述】:

python 新手。我正在测试文件,并试图将一个数字(作为原始输入)写入文件。然后我想要一个我制作的函数,将该数字作为输入参数并用它执行一个方程。

但由于某种原因,在写入文件时会弹出一个奇怪的字符。当我试图复制粘贴它来查找它时,它只是复制为这个奇怪的数字块或一个空白区域。 weird character in notepad

到目前为止,这是我的代码:

def function(x):
    y = x + 1
    return y

Input = raw_input('Number?')

with open('in_test.txt','w+') as inFile_test:
    inFile_test.write(Input)
    lines = inFile_test.readline()
    lines_int = [int(x) for x in lines.split()]
    print str(lines_int)

f_test = function(lines_int)
print str(f_test)

我还尝试将文件格式更改为 r+,检查记事本 (ANSI) 中的编码类型,并查找出现的错误。

    lines_int = [int(x) for x in lines.split()]
ValueError: invalid literal for int() with base 10: '\x02'

我假设错误是由奇怪的字符引起的,但我不确定是什么导致了奇怪的字符。

【问题讨论】:

  • 为什么不用UTF编码?
  • 尝试在初始化lines_int之前添加lines.encode('utf-8')

标签: python python-2.7 file character file-writing


【解决方案1】:

您需要将文件指针重置回开头。 您可以使用tell() 函数检查文件指针的当前位置。

with open('in_test.txt','w+') as inFile_test:
    inFile_test.write(Input)
    print inFile_test.tell()
    inFile_test.seek(0) # re-position the file pointer to the beginning
    lines = inFile_test.readline()
    lines_int = [int(x) for x in lines.split()]
    print str(lines_int)

另外,对 function() 的调用不正确,您已将其定义为接受 int 但使用列表参数调用它。

【讨论】:

  • 谢谢,解决了字符问题。我认为您第 6 行的代码是为了解决这个问题,采用字符串/列表并将其转换为 int?
  • 列表推导式创建一个列表对象。所以 lines_int 是一个 int 类型的列表。所以调用可以是函数(lines_int [0]),或者你可以像这样解包列表---函数(*lines_int)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-07-26
  • 2016-01-23
  • 2015-08-09
  • 1970-01-01
  • 2015-02-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多