Используйте модуль csv
:
import csv
...
with open(in_fnam) as in_file:
with open(out_fnam, 'w') as out_file:
writer = csv.writer(out_file)
for row in csv.reader(in_file):
if row:
writer.writerow(row)
Если вам также необходимо удалить строки, в которых все поля пусты, измените строку if row:
на:
if any(row):
И если вы также хотите обрабатывать поля, состоящие только из пробелов, как пустые, вы можете заменить их на:
if any(field.strip() for field in row):
Обратите внимание, что в Python 2.x и более ранних версиях csv
ожидаемые двоичные файлы, поэтому вам необходимо открыть файлы с флагом e 'b'
. В 3.x это приведет к ошибке.
Думаю, могут помочь такие вещи, как BOOST_STATIC_ASSERT .
Нет, этого нельзя сделать, потому что все расширения макросов (# ... вещи) выполняются на этапе препроцессора, который ничего не знает о типах кода C ++ и даже не нужно ничего знать о языке! Он просто расширяет / проверяет # ... вещи и ничего больше!
Есть и другие распространенные ошибки, например:
enum XY
{
MY_CONST = 7,
};
#if MY_CONST == 7
// This code will NEVER be compiled because the pre-processor does not know anything about your enum!
#endif //
Вы можете получить доступ и использовать только те вещи в #if, которые определены с помощью параметров командной строки для компилятор или через #define.
The preprocessor works without knowing anything about the types, even the builtin one.
BTW, you can still do the check using a static_assert like feature (boost has one for instance, C++0X will have one).
Edit: C99 and C++0X have also WCHAR_MIN
and WCHAR_MAX
macros in
sizeof() is a runtime compile-time function. You cannot call that in a preprocessor directive. I don't think you can check the size of wchar_t during preprocessing. (see Edit 2)
Edit: As pointed out in comments, sizeof() is mostly calculated at compile time. In C99, it can be used at runtime for arrays.
Edit 2: You can do asserts at build time using the techniques described in this thread.
Разве вы не получили бы в основном то, что хотели (ошибка компиляции без необычного сообщения), используя C_ASSERT?
#define C_ASSERT(e) typedef char __C_ASSERT__[(e)?1:-1]
char _assert_wchar_t_is_16bit[ sizeof(wchar_t) == 2 ? 1 : -1];