<ul>
<li>使用<a href="https://docs.python.org/3/library/pathlib.html" rel="nofollow noreferrer">^{<cd2>}</a>模块中的<a href="https://docs.python.org/3/library/pathlib.html#pathlib.Path.rglob" rel="nofollow noreferrer">^{<cd1>}</a>创建现有文件的列表
<ul>
<li><a href="https://realpython.com/python-pathlib/" rel="nofollow noreferrer">Python 3's pathlib Module: Taming the File System</a></li>
<li><a href="https://docs.python.org/3/library/pathlib.html#pathlib.PurePath.parent" rel="nofollow noreferrer">^{<cd3>}</a></li>
<li><a href="https://docs.python.org/3/library/pathlib.html#pathlib.PurePath.stem" rel="nofollow noreferrer">^{<cd4>}</a></li>
<li><a href="https://docs.python.org/3/library/pathlib.html#pathlib.PurePath.suffix" rel="nofollow noreferrer">^{<cd5>}</a></li>
</ul></li>
<li>使用<a href="https://realpython.com/python-f-strings/#f-strings-a-new-and-improved-way-to-format-strings-in-python" rel="nofollow noreferrer">^{<cd6>}</a>更新文件名
<ul>
<li><a href="https://www.python.org/dev/peps/pep-0498/" rel="nofollow noreferrer">PEP 498 - Literal String Interpolation</a></li>
</ul></li>
<li>遍历每个文件:
<ol>
<li>创建一个数据帧</li>
<li>过滤数据帧。如果列不存在(例如<code>AttributeError: 'DataFrame' object has no attribute 'OnHand'</code>),则会发生错误,因此我们将代码放在<a href="https://realpython.com/python-exceptions/" rel="nofollow noreferrer">^{<cd8>}</a>块中。<a href="https://docs.python.org/3/tutorial/controlflow.html#break-and-continue-statements-and-else-clauses-on-loops" rel="nofollow noreferrer">^{<cd9>}</a>语句继续循环的下一次迭代</李>
<li>检查数据帧是否不是<a href="https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.empty.html" rel="nofollow noreferrer">empty</a>。如果不是空的话</李>
<li>如果需要,将数据帧添加到字典以进行额外处理</李>
<li>将数据帧另存为新文件,并在文件名中添加<code>_neg</code></li>
</ol></li>
</ul>
<pre class="lang-py prettyprint-override"><code>from pathlib import Path
import pandas as pd
# set path to top file directory
d = Path(r'e:\PythonProjects\stack_overflow\stock_sites')
# get all xls files
files = list(d.rglob('*.xls'))
# create, filter and save dict of dataframe
df_dict = dict()
for file in files:
# create dataframe
df = pd.read_excel(file)
try:
# filter df and add to dict
df = df[df.OnHand < 0]
except AttributeError as e:
print(f'{file} caused:\n{e}\n')
continue
if not df.empty:
df_dict[f'{file.stem}_neg'] = df
# save to new file
new_path = file.parent / f'{file.stem}_neg{file.suffix}'
df.to_excel(new_path, index=False)
print(df_dict.keys())
>>> dict_keys(['retailonhand_neg', 'shed3onhand_neg', 'tank1onhand_neg', 'tank2onhand_neg', 'warehouse_neg'])
# access individual dataframes as you would any dict
df_dict['retailonhand_neg']
</code></pre>