我正在运行一个终端命令来列出一个目录,我想遍历返回的每一行并搜索一个特定的文件名,到目前为止我有这个......
public sealed class CurrentScope : INotifyWhenDisposed
{
[ThreadStatic]
private static CurrentScope currentScope;
private CurrentScope()
{
}
public static CurrentScope Instance => currentScope ?? (currentScope = new CurrentScope());
public bool IsDisposed { get; private set; }
public event EventHandler Disposed;
public void Dispose()
{
this.IsDisposed = true;
currentScope = null;
if (this.Disposed != null)
{
this.Disposed(this, EventArgs.Empty);
}
}
}
但这只是输出列表并且似乎没有搜索文件,任何人都有一个他们可以指向我的例子吗?
答案 0 :(得分:1)
您可以尝试传递编码pyautogui.typewrite
并将其拆分为utf-8
。
\n
最初,for line in subprocess.check_output(['ls', '-l'], encoding="utf-8").split("\n"):
# print(line)
if "myfile.txt" in line:
print("File Found")
返回字节,因此我们在这里传递编码。此外,由于您想逐行搜索,我们将其与check_output
分开。 (在Python 3上测试过。)
subprocess.check_output
:... 默认情况下,此函数将返回 数据为编码字节。输出数据的实际编码可以 取决于被调用的命令,因此解码到文本将 通常需要在应用程序级别进行处理。可以通过将universal_newlines设置为True来覆盖此行为 如上面在常用参数中所述。 - 引自https://docs.python.org/3/library/subprocess.html#subprocess.check_output
答案 1 :(得分:1)
从ls
内拨打subprocess
会返回Bytes
个对象
因此,首先,您可能希望将返回的值转换为String
然后将String
与New-Line(“\ n”)分开作为分隔符
之后,您可以在List-Values中迭代并搜索您的Needle。
import subprocess
# CALLING "subprocess.check_output(['ls', '-l']" RETURNS BYTES OBJECT...
# SO WE DECODE THE BYTES INTO STRING, FIRST
# AND THEN SPLIT AT THE NEW-LINE BOUNDARY TO CONVERT IT TO A LIST
for line in bytes.decode(subprocess.check_output(['ls', '-l'])).split(sep="\n"):
# NOW WE CAN CHECK IF THE DESIRED FILE IS IN THE LINE
if "(myfile.txt)" in line:
print("File Found")
答案 2 :(得分:1)
为什么不使用更可靠的内容,例如os.listdir
或glob
:
import glob
if glob.glob('myfile.txt'):
print('File found')
else:
print('File not found')
glob.glob
函数返回与通配符匹配的文件列表。在这种情况下,如果文件存在,您将['myfile.txt']
,如果不存在,则会[]
。
答案 3 :(得分:0)
import os
def find(name):
for root, dirs, files in os.walk('C:\\');
if name in files:
print(root,name)
print("FINISH")
input()
try:
s=input("name: ")
find(s)
except:
None
答案 4 :(得分:-1)
输出目录的内容,我推荐使用os模块。
import os
content = os.listdir(os.getcwd())
然后你有一个可搜索的列表。
但是你确定,你的文件名为(myfile.txt)??