Python I / O和字符串匹配

时间:2013-05-29 19:56:17

标签: python io string-matching

我意识到这可能很容易,我想在Python中使用相当于这个C代码:

#include <stdio.h>
#include <string.h>
#define BUFFER 200
int main()
{
    char buffer[BUFFER];
    while (fgets(buffer, BUFFER, stdin))
    {
        if (strstr(buffer, "BEER"))
            printf("Drink up!\n");
    }
    return 0;
}

我在网上搜索,但我认为我的大脑已被炒了。

3 个答案:

答案 0 :(得分:2)

Pythonic要做的事情有点不同:

import fileinput
for line in fileinput.input():
    if "BEER" in line:
        print("Drink up!")

但是这会导致你的C代码没有做很多事情,比如允许用户传递文件名参数来代替stdin作为参数等等。


这是您的代码的更直接映射:

try:
    while True:
        buffer = input() # or raw_input, for 2.x
        if "BEER" in buffer:
            print("Drink up!")
except EOFError:
    pass

但是,缺少前200个字符中包含"BEER"的300多个字符行的行,然后在下一个字符中再次打印两行的部分,或者缺少300个字符的行“BEER”的部分“从第198位开始根本不打印它。


如果这是一个问题,你可能想要这样的东西:

import sys

while True:
    buffer = sys.stdin.readlines(200)
    if not buffer:
        break
    for line in buffer:
        for i in range(0, len(buffer), 200):
            if "BEER" in buffer[i*200:i*200+200]:
                print("Drink up!")

答案 1 :(得分:1)

查看raw_input从stdin获取用户输入,print将其打印到stdout:

http://docs.python.org/2/library/functions.html#raw_input http://docs.python.org/2/library/functions.html#print

答案 2 :(得分:1)

这样做的等效方式,虽然不完全相同

for line in iter(raw_input, ''):
    if 'BEER' in line:
        print('Drink up!')


foo
bar
aBEERc
Drink up!
***blank line***