我正在学习python,并尝试将带有数字的文件复制到另一个文件中,但这些数字四舍五入(整数)。
源文件为fichiernombre.rtf
,并有3个数字:
14.896
7894.6
132.278
收件人文件为fichiernombre1.rtf
为此,我使用以下脚本。
def valArrondie(ch):
f = float(ch)
e = int(f + .5)
return str(e)
fisource = input("Nom du fichier à traiter : ")
fidest = input("Nom du fichier destinataire : ")
fs = open(fisource, 'r')
fd = open(fidest, 'w')
while 1:
ligne = fs.readline()
if ligne == "" or ligne == "\n":
break
ligne = valArrondie(ligne)
fd.write(ligne + "\n")
fd.close()
fs.close()
我尝试了其他方法,但是应该认为这是本书中正确的方法。但是,我得到了这个:
Drive/formation/python/exercice_95_arrondis.py", line 17, in <module> ligne = valArrondie(ligne)
File "/Users/xxxxx/Google
Drive/formation/python/exercice_95_arrondis.py", line 3, in valArrondie
f = float(ch)
ValueError: could not convert string to float:'{\\rtf1\\ansi\\ansicpg1252\\cocoartf1561\\cocoasubrtf600\n'
我真的不明白。你有解决办法吗?
答案 0 :(得分:0)
Python脚本逐行读取文件,每行读入一个字符串。然后,它将每个字符串传递给valArrondie(ch)
函数,然后该函数尝试从该字符串(float(ch)
)创建一个浮点数。
此操作失败,因为文件实际上包含无法转换为浮点数的行。
这样做的原因是,您正在为输入文件使用文件格式,该文件格式将元信息包括到文件中(正如Mike Scotty在评论中指出的那样)。 .rtf
代表RTF格式。它之所以“丰富”,是因为它可以包含诸如格式之类的元信息,而不是仅包含原始文本字符而没有其他内容的纯文本文件。
确保将输入文件另存为纯文本文件。您可以使用less
之类的命令在终端中查看文件来验证这一点。
因此,在执行less fichiernombre.rtf
时,您应该看到类似以下的内容:
14.896
7894.6
132.278
不是这样的:
{\colortbl;\red255\green255\blue255;}
{\*\expandedcolortbl;;}
\paperw11900\paperh16840\margl1440\margr1440\vieww10800\viewh8400\viewkind0
\pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardirnatural\partightenfactor0
\f0\fs24 \cf0 14.896\
7894.6\
132.278}