为什么我的 for 循环在 Python 中不能正常工作?
Why does my for-loop not work properly in Python?
Python 的新功能,希望大家能帮忙
我有一个带有这个 for 循环的脚本,它检查目录中的文件列表,我需要做的是,如果每个文件以 'xlsx' 结尾,它会执行一段代码,如果它以'csv' 它执行其他块代码。
我必须创建变量 extension 来提取文件的扩展名,因为如果我使用 file,它会显示错误 WindowsPath' object has no attribute 'endswith'
for file in file_list:
#to extract the file extension:
extension = os.path.splitext(file)[1][1:]
print(file)
if extension.endswith('xlsx'):
all_df_list.append(pd.read_excel(file, header=0, engine='openpyxl'))
a = round(time.time() - start_time,2)
print(a)
elif extension.endswith('csv'):
all_df_list.append(pd.read_csv(file, chunksize=10000))
a = round(time.time() - start_time,2)
print(a)
else:
print("Not working")
当我 运行 整个脚本时,它开始循环并执行第一个文件的命令,但随后一直执行到 else 语句。它应该对每个文件做同样的事情...这些是结果(用 xxx 隐藏敏感信息)
Z:\DataFiles\XXX\XXX\XXX\XXX\XXX\XXX_XXX_0000.xlsx
2.43
Z:\DataFiles\XXX\XXX\XXX\XXX\XXX\XXX_XXX_2019.XLSX
Not working
Z:\DataFiles\XXX\XXX\XXX\XXX\XXX\XXX_XXX_2020.XLSX
Not working
Z:\DataFiles\XXX\XXX\XXX\XXX\XXX\XXX_XXX_2021.XLSX
Not working
Z:\DataFiles\XXX\XXX\XXX\XXX\XXX\XXXX_2022.XLSX
Not working
你能指出我做错了什么吗?
你不能在循环外定义extension = os.path.splitext(file)[1][1:]
吗?
您的脚本正在查找 .xlsx 和 .csv,因此 .XLSX 在 else 中处理:
阻止。
当您将值分配给变量扩展名时,您可以使用函数 .lower()
。
extension = os.path.splitext(file)[1][1:].lower()
使用pathlib
for pathing,你可以从.name
!
获取字符串
>>> import pathlib
>>> p = pathlib.Path("foo/bar/baz.EXT")
>>> p.name.lower().endswith(".ext")
True
由于 file
是一个 WindowsPath
对象(如错误所示),您可能想使用 .suffix
,并在比较之前使用 .lower()
将其小写针对小写扩展名:
for file in file_list:
if file.suffix.lower() == '.xlsx':
all_df_list.append(pd.read_excel(file, header=0, engine='openpyxl'))
elif file.suffix.lower() == '.csv':
all_df_list.append(pd.read_csv(file, chunksize=10000))
else:
print("Not working")
continue
print(round(time.time() - start_time, 2))
我尝试了不同的解决方案,按照建议,我只是使用了:
if file.suffix.lower() == '.xlsx':
all_df_list.append(pd.read_excel(file, header=0, engine='openpyxl'))
a = round(time.time() - start_time,2)
print(a)
elif file.suffix.lower() == '.csv':
all_df_list.append(pd.read_csv(file, chunksize=10000))
a = round(time.time() - start_time,2)
print(a)
它奏效了。非常感谢!!!
Python 的新功能,希望大家能帮忙
我有一个带有这个 for 循环的脚本,它检查目录中的文件列表,我需要做的是,如果每个文件以 'xlsx' 结尾,它会执行一段代码,如果它以'csv' 它执行其他块代码。 我必须创建变量 extension 来提取文件的扩展名,因为如果我使用 file,它会显示错误 WindowsPath' object has no attribute 'endswith'
for file in file_list:
#to extract the file extension:
extension = os.path.splitext(file)[1][1:]
print(file)
if extension.endswith('xlsx'):
all_df_list.append(pd.read_excel(file, header=0, engine='openpyxl'))
a = round(time.time() - start_time,2)
print(a)
elif extension.endswith('csv'):
all_df_list.append(pd.read_csv(file, chunksize=10000))
a = round(time.time() - start_time,2)
print(a)
else:
print("Not working")
当我 运行 整个脚本时,它开始循环并执行第一个文件的命令,但随后一直执行到 else 语句。它应该对每个文件做同样的事情...这些是结果(用 xxx 隐藏敏感信息)
Z:\DataFiles\XXX\XXX\XXX\XXX\XXX\XXX_XXX_0000.xlsx
2.43
Z:\DataFiles\XXX\XXX\XXX\XXX\XXX\XXX_XXX_2019.XLSX
Not working
Z:\DataFiles\XXX\XXX\XXX\XXX\XXX\XXX_XXX_2020.XLSX
Not working
Z:\DataFiles\XXX\XXX\XXX\XXX\XXX\XXX_XXX_2021.XLSX
Not working
Z:\DataFiles\XXX\XXX\XXX\XXX\XXX\XXXX_2022.XLSX
Not working
你能指出我做错了什么吗?
你不能在循环外定义extension = os.path.splitext(file)[1][1:]
吗?
您的脚本正在查找 .xlsx 和 .csv,因此 .XLSX 在 else 中处理:
阻止。
当您将值分配给变量扩展名时,您可以使用函数 .lower()
。
extension = os.path.splitext(file)[1][1:].lower()
使用pathlib
for pathing,你可以从.name
!
>>> import pathlib
>>> p = pathlib.Path("foo/bar/baz.EXT")
>>> p.name.lower().endswith(".ext")
True
由于 file
是一个 WindowsPath
对象(如错误所示),您可能想使用 .suffix
,并在比较之前使用 .lower()
将其小写针对小写扩展名:
for file in file_list:
if file.suffix.lower() == '.xlsx':
all_df_list.append(pd.read_excel(file, header=0, engine='openpyxl'))
elif file.suffix.lower() == '.csv':
all_df_list.append(pd.read_csv(file, chunksize=10000))
else:
print("Not working")
continue
print(round(time.time() - start_time, 2))
我尝试了不同的解决方案,按照建议,我只是使用了:
if file.suffix.lower() == '.xlsx':
all_df_list.append(pd.read_excel(file, header=0, engine='openpyxl'))
a = round(time.time() - start_time,2)
print(a)
elif file.suffix.lower() == '.csv':
all_df_list.append(pd.read_csv(file, chunksize=10000))
a = round(time.time() - start_time,2)
print(a)
它奏效了。非常感谢!!!