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, вероятно,лучше, но вы можете делать то же самое с% magics - если вы достаточно хорошо понимаете shell.
Чтобы использовать 'magics' в выражении Python, я должен использовать базовые функции, а не'!'или синтаксис «%», например
import IPython
for txt in ['a.t1','b.t1','c.t1']:
IPython.utils.process.getoutput('touch %s'%txt)
Функция getoutput
используется %sx
(что лежит в основе !!
), которая использует subprocess.Popen
.Но если вы приступите ко всей этой работе, вы также можете использовать функции os
, которые предоставляет сам Python.
Для имен файлов может потребоваться дополнительный уровень цитирования, чтобы гарантировать, что оболочка недать синтаксическую ошибку:
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