为了账号安全,请及时绑定邮箱和手机立即绑定

如何 !rm python_var(在 Jupyter 笔记本中)

如何 !rm python_var(在 Jupyter 笔记本中)

拉莫斯之舞 2021-09-28 15:26:43
我知道我可以这样做:CSV_Files = [file1.csv, file2.csv, etc...]%rm file1.csv!rm file2.csv但是我怎么能把它作为一个变量来做。例如。TXT_Files = [ABC.txt, XYZ.txt, etc...]for file in TXT_Files:  !rm file
查看完整描述

2 回答

?
炎炎设计

TA贡献1808条经验 获得超4个赞

rm 每次调用可以删除多个文件:


In [80]: !touch a.t1 b.t1 c.t1

In [81]: !ls *.t1

a.t1  b.t1  c.t1

In [82]: !rm -r a.t1 b.t1 c.t1

In [83]: !ls *.t1

ls: cannot access '*.t1': No such file or directory

如果起点是文件名列表:


In [116]: alist = ['a.t1', 'b.t1', 'c.t1']

In [117]: astr = ' '.join(alist)            # make a string

In [118]: !echo $astr                       # variable substitution as in BASH

a.t1 b.t1 c.t1

In [119]: !touch $astr                    # make 3 files

In [120]: ls *.t1

a.t1  b.t1  c.t1

In [121]: !rm -r $astr                    # remove them

In [122]: ls *.t1

ls: cannot access '*.t1': No such file or directory

使用 Python 自己的 OS 函数可能会更好,但是您可以使用 %magics 做很多相同的事情 - 如果您足够了解 shell。


要在 Python 表达式中使用“魔法”,我必须使用底层函数,而不是“!” 或 '%' 语法,例如


import IPython

for txt in ['a.t1','b.t1','c.t1']:

    IPython.utils.process.getoutput('touch %s'%txt)

该getoutput函数由%sx(其基础!!)使用,它使用subprocess.Popen. 但是,如果您从事所有这些工作,您不妨使用osPython 本身提供的功能。


文件名可能需要添加一层引用以确保 shell 不会给出语法错误:


In [129]: alist = ['"a(1).t1"', '"b(2).t1"', 'c.t1']

In [130]: astr = ' '.join(alist)

In [131]: !touch $astr

In [132]: !ls *.t1

'a(1).t1'   a.t1  'b(2).t1'   b.t1   c.t1


查看完整回答
反对 回复 2021-09-28
?
蝴蝶不菲

TA贡献1810条经验 获得超4个赞

你可以在没有魔法 shell 命令的 Python 中处理这个问题。我建议使用该pathlib模块,以获得更现代的方法。对于您正在做的事情,它将是:


import pathlib

csv_files = pathlib.Path('/path/to/actual/files')

for csv_file in csv_files.glob('*.csv'):

    csv_file.unlink()

使用.glob()方法仅过滤您要使用的文件,并.unlink()删除它们(类似于os.remove())。


避免file用作变量,因为它是语言中的保留字。


查看完整回答
反对 回复 2021-09-28
  • 2 回答
  • 0 关注
  • 247 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信