我正试图调用一个foo.py,并将一个filePath传递给bar.py
foo.py
for path in Path('./csvs').rglob('*.csv'):
exec(open('bar.py').read())
exec(open('bar2.py').read())
exec(open('bar3.py').read())
bar.py
df = pd.read_csv(path, usecols=cols)
#rest of code
有可能吗?
在.read()
处理一个文件后,您将处理一个字符串。因此,您可以.replace()
作为占位符。
file1.py:
exec(open("file2.py").read().replace("*place_holder*", "10"))
file2.py:
def fn():
print("My number is *place_holder*")
fn()
但是要小心选择什么作为占位符。.replace()
将替换所有出现的事件。
当然,对于更复杂的替换,您可以使用regex。它可以更好、更安全地限制搜索。
我不知道你的bar.py的确切格式,但你可以试试:
for filePath in Path('./csvs').rglob('*.csv'):
for i in range(1, 4):
with open(f`bar{i}.py`) as f;
bar_py_str = f.read()
bar_py_str = bar_py_str.replace(
'df = pd.read_csv(filePath, usecols=cols)',
f'df = pd.read_csv({str(filePath.resolve()}, usecols=cols)'
)
exec(bar_py_str)