我正在使用import csv
def parts(logfile):
with open(logfile, newline='') as f:
reader = csv.reader(f)
files = [column for row in reader for column in row if column]
fcount = len(files)
storage = 0
for i, filename in enumerate(files):
storage += os.path.getsize(file)
if storage >= 2500000:
input("Please close some files to continue, then press ENTER")
storage = 0
print(f'Auslastung: {storage} bite / 2500000 bite')
yield file
print(f'Fortschritt: {i} / {fcount} ({i / fcount:.2%}) - {name}')
参数编写一个简单的代码。我想知道是否可以将for file in parts('C:/Users/user/Desktop/log.txt'):
oDoc = oApp.Documents.Open(file)
函数用于以下用途。
*argv[]
该程序可以仅采用getopt()
(例如./myprogram -a PATH
./myprogram PATH
),也可以采用PATH
之外的其他方式/usr/tmp
。 -a
可以用于此状态吗?如果可以,怎么办?
答案 0 :(得分:3)
该程序可以仅采用
PATH
(例如/usr/tmp
),也可以采用PATH
之外的其他选项。getopt()
可以用于此状态吗?如果可以,怎么办?
当然。我不确定您在哪里看到了潜在的问题,除非您不理解POSIX和getopt()
在 options 和 arguments 之间的区别。它们是相关的,但并非完全相同。
getopt()
很好,因为实际上没有指定任何选项,它使您可以访问非选项参数,例如PATH
似乎适合您,无论有多少个选项已指定。通常的用法模型是循环调用getopt()
,直到返回-1
,以指示命令行中没有更多选项可用。在每个步骤中,全局变量optind
变量提供下一个要处理的argv
元素的索引,在getopt()
(首先)返回-1之后,optind
提供索引第一个非选项参数。对于您而言,这就是您希望找到PATH
的地方。
int main(int argc, char *argv[]) {
const char options[] = "a";
_Bool have_a = 0;
char *the_path;
int opt;
do {
switch(opt = getopt(argc, argv, options)) {
case -1:
the_path = argv[optind];
// NOTE: the_path will now be null if no path was specified,
// and you can recognize the presence of additional,
// unexpected arguments by comparing optind to argc
break;
case 'a':
have_a = 1;
break;
case '?':
// handle invalid option ...
break;
default:
// should not happen ...
assert(0);
break;
}
} while (opt >= 0);
}
答案 1 :(得分:2)
使用"a"
的optstring可使-a
的参数充当标志。
optind
有助于检测到仅存在一个附加参数。
该程序可以作为./program -a path
或./program path
#include <stdio.h>
#include <unistd.h>
int main(int argc, char **argv)
{
char op = ' ';//default value
int opt;
while ((opt = getopt(argc, argv, "a")) != -1)//optstring allows for -a argument
{
switch (opt)
{
case 'a':
op = 'a';//found option, set op
break;
default:
fprintf(stderr, "%s: unknown option %c\n", argv[0], optopt);
return 1;
}
}
if ( optind + 1 != argc)//one argument allowed besides optstring values
{
fprintf(stderr, "Usage: %s [-a] PATH\n", argv[0]);
return 1;
}
printf("%s %c\n", argv[optind], op);
return 0;
}