如何在将内容添加回文件之前使用通配符删除一些文件?
How to remove some number of files using a wild card before adding stuff back to them?
我有一组 .txt
个名为 my_file_1.txt, my_file_2.txt, ..., my_file_n.txt
的文件,其中 n 是有限整数。由于我的 python 代码是 运行(在路径为 ~/simulation/some_code
的目录中),它使用以下 for loop
:
将数据添加到这些文件中
for realization in np.arange(1, n+1):
# Identifying the file_path
some_name = 'output/{}/Info/{}/{}/parameter_{:.3f}/my_file_{}.txt'.format(size, name, status, value, realization)
# do some stuff
with open(some_name, "a") as filename:
print('{}'.format(some_list), file=filename)
filename.close()
但是,首先,这些文件不是空的,需要清空。为此,我提前 运行 以下行(在主目录 ~/
中,相对于上述代码的目录向上两层)以确保文件在被删除之前为空修改:
os.system('> output/{}/Info/{}/{}/parameter_{:.3f}/my_file_*.txt'.format(size, name, status, value))
虽然我希望看到 * 符号应该充当通配符来清空上面所有类似的文本文件,但文件似乎是从以前的数据中累积的,而不是删除初始数据并添加上面的内容。我是否错误地使用了 * 通配符?这个问题可以在不改变我的代码路径的情况下解决吗?
您对通配符的理解是正确的。错误在于重定向。默认情况下,您只重定向 (>) 到一个输出。您可以使用程序 tee
将标准输出重定向到多个其他文件,如下所示:
(echo -n, 什么都不回显)
echo -n | tee *
管道|
将echo -n的stdout传递给tee的stdin。
然后通配符将扩展到目录中的所有文件。
echo -n | tee my_file_1.txt, my_file_2.txt, ..., my_file_n.txt
我有一组 .txt
个名为 my_file_1.txt, my_file_2.txt, ..., my_file_n.txt
的文件,其中 n 是有限整数。由于我的 python 代码是 运行(在路径为 ~/simulation/some_code
的目录中),它使用以下 for loop
:
for realization in np.arange(1, n+1):
# Identifying the file_path
some_name = 'output/{}/Info/{}/{}/parameter_{:.3f}/my_file_{}.txt'.format(size, name, status, value, realization)
# do some stuff
with open(some_name, "a") as filename:
print('{}'.format(some_list), file=filename)
filename.close()
但是,首先,这些文件不是空的,需要清空。为此,我提前 运行 以下行(在主目录 ~/
中,相对于上述代码的目录向上两层)以确保文件在被删除之前为空修改:
os.system('> output/{}/Info/{}/{}/parameter_{:.3f}/my_file_*.txt'.format(size, name, status, value))
虽然我希望看到 * 符号应该充当通配符来清空上面所有类似的文本文件,但文件似乎是从以前的数据中累积的,而不是删除初始数据并添加上面的内容。我是否错误地使用了 * 通配符?这个问题可以在不改变我的代码路径的情况下解决吗?
您对通配符的理解是正确的。错误在于重定向。默认情况下,您只重定向 (>) 到一个输出。您可以使用程序 tee
将标准输出重定向到多个其他文件,如下所示:
(echo -n, 什么都不回显)
echo -n | tee *
管道|
将echo -n的stdout传递给tee的stdin。
然后通配符将扩展到目录中的所有文件。
echo -n | tee my_file_1.txt, my_file_2.txt, ..., my_file_n.txt