Одно место, где структура была полезна для меня, - когда у меня есть система, это получает сообщения фиксированного формата (говорят, последовательный порт) от другой системы. Можно бросить поток байтов в структуру, которая определяет поля, и затем легко получите доступ к полям.
typedef struct
{
int messageId;
int messageCounter;
int messageData;
} tMessageType;
void processMessage(unsigned char *rawMessage)
{
tMessageType *messageFields = (tMessageType *)rawMessage;
printf("MessageId is %d\n", messageFields->messageId);
}
, Очевидно, это - то же самое, которое Вы сделали бы в C, но я нахожу, что издержки необходимости декодировать сообщение в класс обычно не стоят того.
Я бы порекомендовал сказать
line.split(";")[0]
, который даст вам строку, содержащую все символы до, но не включая первый ";" характер. Если нет ";" присутствует символ, то вы получите всю строку.
просто разделите строку по комментарию и получите первый элемент например,
line.split(";")[0]
file = open(r'c:\temp\test.txt', 'r')
for line in file: print
line.split(";")[0].strip()
Итак, вы захотите разделить строку по первой точке с запятой, взять все перед ней, удалить все оставшиеся пробелы и добавить символ новой строки.
rtr = line.split(";", 1)[0].rstrip() + '\n'
Ссылки на документацию:
Для Python 2.5 или выше, я бы использовал метод partition
:
rtr = line.partition(';')[0].rstrip() + '\n'
Чтение, разделение, разделение и объединение строк с новой строкой - все в одной строке Python:
rtr = '\n'.join(line.split(';')[0].strip() for line in open(r'c:\temp\test.txt', 'r'))
Я не тестировал это на python, но использую аналогичный код в другом месте.
import re
content = open(r'c:\temp\test.txt', 'r').read()
content = re.sub(";.+", "\n")
Другой способ:
In [6]: line = "foo;bar" In [7]: line[:line.find(";")] + "\n" Out[7]: 'foo\n'