有没有办法修改字符串以删除小数点?

2024-09-27 19:29:17 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个有很多图像的文件。每个图像的名称如下:

  • 100304.jpg
  • 100305.jpg
  • 100306.jpg
  • 等等

我还有一个电子表格,每个图像都是一行,行中的第一个值是名称,名称后的值是各种小数和0来描述每个图像的特征

问题是,当我从工作表中提取名称时,有东西添加了一个小数,这导致文件无法通过shutil.move()传输

import xlrd
import shutil

dataLocation = "C:/Users/User/Documents/Python/Project/sort_solutions_rev1.xlsx"
imageLocBase = "C:/Users/User/Documents/Python/Project/unsorted"
print("Specify which folder to put images in. Type the number only.")
print("1")
print("2")
print("3")
int(typeOfSet) = input("")

#Sorting for folder 1
if int(typeOfSet) == 1:
#Identifying what to move
        name = str(sheet.cell(int(nameRow), 0).value)
        sortDataStorage = (sheet.cell(int(nameRow), 8).value) #float
        sortDataStorageNoFloat = str(sortDataStorage) #non-float
        print("Proccessing: " + name)
        print(name + " has a correlation of " + (sortDataStorageNoFloat))

#sorting for this folder utilizes the information in column 8)
        if sortDataStorage >= sortAc:
                print("test success")
                folderPath = "C:/Users/User/Documents/Python/Project/Image Folder/Folder1"
                shutil.move(imageLocBase + "/" + name, folderPath)
                print(name + " has been sorted.")
        else:
                print(name + " does not meet correlation requirement. Moving to next image.")

我遇到的问题发生在shutil.move(imageLocBase+“/”+名称,folderPath)上 出于某种原因,我的代码从电子表格中获取名称(例如:100304),然后添加一个“.0”,因此当试图移动文件时,它尝试移动100304.0(不存在),而不是100304


Tags: 文件name图像project名称movefolderusers
3条回答

使用pandas读取Excel文件。

正如在对原始问题的评论中所建议的,下面是一个如何使用pandas读取Excel文件的快速示例,以及一个数据结构示例

如有任何问题,请随意大声询问,或查看docs

import pandas as pd

# My path looks a little different as I'm on Linux.
path = '~/Desktop/so/MyImages.xlsx'

df = pd.read_excel(path)

数据结构

这完全是人为的,因为我没有你的实际文件的例子

    IMAGE_NAME  FEATURE_1   FEATURE_2   FEATURE_3
0   100304.jpg  0.0111      0.111       1.111
1   100305.jpg  0.0222      0.222       2.222
2   100306.jpg  0.0333      0.333       3.333

希望这能帮助你开始

建议:

Excel喜欢认为它很聪明,并且会做一些“意想不到的”事情,就像您遇到的十进制(数据类型)问题一样<强>也许考虑将您的图像数据存储在数据库(SQLite)或普通的CSV文件中。< /强>熊猫也可以从其中之一读取!p>

splitOn = '.'
nameOfFile = text.split(splitOn, 1)[0]

应该有用

如果我们使用您的文件名eg 12345.0并创建一个var

name = "12345.0"

现在我们需要拆分这个变量。在本例中,我们希望在.上拆分 所以我们将这个条件保存为第二个var

splitOn = '.'  

为python使用.split。 这里我们提供了文本(变量名)和pythonsplit命令。 所以,让它成为文字

12345.0
split at .
only make one split and save as two vars in a list 
(so we have 12345 at position 0 (1st value) 
and 0 at position 1 (2nd value) in a list)

save 1st var
(as all lists are 0 based we ask for [0] 
(if you ever get confused with list, arrays etc just start counting
from 0 instead of one on your hands and then you know 
ie position 0 1 2 3 4 = 1st value, 2nd value, 3rd value, 4th value, 5th value)

nameOfFile = name.split(splitOn, 1)[0] 
             12345.0 split ( split on . , only one split ) save position 0 ie first value

所以

name = 12345.0
splitOn = '.'
nameOfFile = name.split(splitOn, 1)[0]   
yield(nameOfFile)

输出将是

12345

我希望这有帮助 https://www.geeksforgeeks.org/python-string-split/

如下面突出显示的,将“转换为浮点”转换为“在中” https://www.geeksforgeeks.org/type-conversion-python/

如果保存为float

name 12345.0
newName = round(int(name))

这将使浮点值四舍五入(因为其0将向下四舍五入)

或 如果将float另存为字符串

print(int(float(name)))

显然,您从电子表格中检索到的值被解析为浮点数,因此当您将其转换为字符串时,它将保留小数部分。
您可以从字符串值中修剪“.0”,或在转换为字符串之前将其转换为整数

您还可以检查电子表格的单元格格式,并确保其设置为正常(idk设置,但不是数字)。有了这个固定值,您的数据可能不会再与.0一起提供了

相关问题 更多 >

    热门问题