百分比完整计算:如果是整数则显示为整数,否则显示小数
Percentage-complete calculation: display as integer if whole number, otherwise display fractional number
鉴于此代码 (saved here as a gist):
import glob
num_files = len(glob.glob('*.jpg'))
if num_files > 0:
print("Found {0} JPEG files".format(num_files))
jpeg_files = glob.iglob('*.jpg')
for count, filename in enumerate(jpeg_files, start=1):
print("----\n")
percent_complete = int((count * 100) / num_files)
print("File: {0} ({1} of {2}; {3}%).".format(
filename, count, num_files, percent_complete))
if count == num_files:
print("Working on {0}...".format(filename))
# do stuff
print("That was the last file.\n")
else:
print("Working on {0}...\n".format(filename))
# do stuff
else:
print("No .jpg files in current directory. Exiting.")
pass
我有两个主要问题:
有没有更好的方法来构建第一部分,其中我 运行 glob
以获得文件数?只有当迭代器的计数不为零时,有没有什么方法可以 运行 迭代器?
因为我已经完成了 (count * 100)
,打印语句只会显示“5%”或“25”,而不会显示“25.5%”或“39.6%”。仅当百分比为整数时,如何才能让 percent_complete
显示为分数(即“32.5%”)? (即我不想显示“25.0”。)
谢谢,
休
只需删除 int() 并添加:
...
percent_complete = (count * 100) / num_files
if percent_complete % 1 == 0:
percent_complete = int(percent_complete)
print...
通过做函数判断百分比是否为整数值解决,return如果不是则取小数点后两位:
import glob
def two_decimals(number: float):
"""Return passed number to two decimal places if not an integer,
otherwise return number as an integer."""
if (number - int(number) != 0):
return "%.2f" % number
else:
return "%d" % number
num_files = len(glob.glob('*.jpg'))
if num_files > 0:
print("Found {0} JPEG files".format(num_files))
jpeg_files = glob.iglob('*.jpg')
for count, filename in enumerate(jpeg_files, start=1):
percent_complete = ((count * 100) / num_files)
print("File: {0} ({1} of {2}; {3}%).".format(
filename,
count,
num_files,
two_decimals(percent_complete)))
if count == num_files:
print("Working on {0}...".format(filename))
# do stuff
print("That was the last file.\n")
else:
print("Working on {0}...\n".format(filename))
# do stuff
else:
print("No .jpg files in current directory. Exiting.")
pass
鉴于此代码 (saved here as a gist):
import glob
num_files = len(glob.glob('*.jpg'))
if num_files > 0:
print("Found {0} JPEG files".format(num_files))
jpeg_files = glob.iglob('*.jpg')
for count, filename in enumerate(jpeg_files, start=1):
print("----\n")
percent_complete = int((count * 100) / num_files)
print("File: {0} ({1} of {2}; {3}%).".format(
filename, count, num_files, percent_complete))
if count == num_files:
print("Working on {0}...".format(filename))
# do stuff
print("That was the last file.\n")
else:
print("Working on {0}...\n".format(filename))
# do stuff
else:
print("No .jpg files in current directory. Exiting.")
pass
我有两个主要问题:
有没有更好的方法来构建第一部分,其中我 运行
glob
以获得文件数?只有当迭代器的计数不为零时,有没有什么方法可以 运行 迭代器?因为我已经完成了
(count * 100)
,打印语句只会显示“5%”或“25”,而不会显示“25.5%”或“39.6%”。仅当百分比为整数时,如何才能让percent_complete
显示为分数(即“32.5%”)? (即我不想显示“25.0”。)
谢谢,
休
只需删除 int() 并添加:
...
percent_complete = (count * 100) / num_files
if percent_complete % 1 == 0:
percent_complete = int(percent_complete)
print...
通过做函数判断百分比是否为整数值解决,return如果不是则取小数点后两位:
import glob
def two_decimals(number: float):
"""Return passed number to two decimal places if not an integer,
otherwise return number as an integer."""
if (number - int(number) != 0):
return "%.2f" % number
else:
return "%d" % number
num_files = len(glob.glob('*.jpg'))
if num_files > 0:
print("Found {0} JPEG files".format(num_files))
jpeg_files = glob.iglob('*.jpg')
for count, filename in enumerate(jpeg_files, start=1):
percent_complete = ((count * 100) / num_files)
print("File: {0} ({1} of {2}; {3}%).".format(
filename,
count,
num_files,
two_decimals(percent_complete)))
if count == num_files:
print("Working on {0}...".format(filename))
# do stuff
print("That was the last file.\n")
else:
print("Working on {0}...\n".format(filename))
# do stuff
else:
print("No .jpg files in current directory. Exiting.")
pass