当前位置: 代码迷 >> python >> 将带有数字的文件复制到带有这些数字的四舍五入的另一个文件
  详细解决方案

将带有数字的文件复制到带有这些数字的四舍五入的另一个文件

热度:79   发布时间:2023-07-16 09:49:44.0

我正在学习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'

我真的不明白。 你有解决方案吗?

Python脚本逐行读取文件,每一行读入一个字符串。 然后,它将每个字符串传递给valArrondie(ch)函数,该函数然后尝试从该字符串( float(ch) )创建一个浮点数。

该操作失败,因为该文件实际上包含无法转换为浮点数的行。

这样做的原因是,您正在为输入文件使用文件格式,该文件格式将元信息包括到文件中(正如Mike Scotty在评论中指出的那样)。 .rtf代表RTF格式。 它之所以“丰富”,是因为它可以包含诸如格式之类的元信息,而不是仅包含原始文本字符而没有其他内容的纯文本文件。

确保将输入文件另存为纯文本文件。 您可以通过在终端中使用less命令来查看文件,从而验证这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}
  相关解决方案