假设我有一个包含几行的文件source.txt。 我想一遍又一遍地打印行,直到我手动中断程序。
function custom_support_ticket_ajax_form_callback($args)
{
$cas = $args['field_level_list']['und']['#value'];
switch($cas){
case 1:
$message = t('Ticket 1');
break;
case 2:
$message = t('Ticket 2');
break;
case 3:
$message = t('Ticket 3');
break;
default :
$message = 'X';
}
$form['level_message']['level_textarea'] = [
'#type' => 'textarea',
'#title' => 'message',
'#value' => $message,
'#weight' => -9,
];
$form['level_message']['level_submit'] = [
'#type' => 'submit',
'#value' => 'Send',
'#ajax' => [
'event' => 'click',
'callback' => 'custom_support_sendMessage_callback'
],
'#weight' => -8
];
return ajax_command_replace('#level_message', $form['level_message']);}
最简单的解决方案是开放式和接近循环。我的感觉是,这不是最好的解决方案。
你能提出更好的建议吗? 如何多次循环变量源?
此致
答案 0 :(得分:4)
我不确定这会有效,但看起来你可以只seek
到文件的开头,然后继续迭代:
file_source = 'source.txt'
source = open(file_source,'r')
while 1:
for line in source:
print line
source.seek(0)
source.close()
显然,如果文件很小,你可以简单地将整个内容读入内存中的列表,然后迭代它。
答案 1 :(得分:1)
您可以先阅读这些行并将其保存到列表中。因此,您的文件在阅读后关闭。然后你可以继续你的无限循环:
lines = []
with open(file_source, 'rb') as f:
lines = f.readlines()
while 1:
for line in lines:
print line
但是,如果您的文件非常大,则不建议这样做,因为文件中的所有内容都将被读入内存:
使用
EOF
读取readline()
,然后返回包含此类读取行的list
。