Вы можете просто поместить все строки вашего CSV-файла в список через readlines()
, а затем удалить нужную строку. Например:
f = open("mycsvfile.csv")
l = f.readlines()
for i in l:
... # do some operation
del l[i] # delete the line
Есть метод грубой силы, который я иногда использую, но вы должны знать, в каких каталогах искать нужную вам библиотеку (обычно подозреваются /lib, /usr/lib и /usr/local/lib). Я создал сценарий оболочки, который я назвал «gnm» (сокращение от «grep nm», двух используемых им утилит) со следующим содержимым. Если вы создаете такой текстовый файл, не забудьте сделать его исполняемым (chmod +x gnm).
#!/bin/sh
if [ $# -lt 2 ] ; then
echo Usage: $0 pattern file[s]
exit
fi
pattern=$1
shift
while [ $# -gt 0 ] ; do
nm $1 | grep $pattern > /dev/null
if [ $? -eq 0 ] ; then
echo $1
fi
shift
done
Когда я ищу библиотеку, которая определяет конкретный символ, я выдаю команду примерно такого вида:
gnm symbol /usr/lib/*.a
Например, указанный вами источник дает мне следующие ошибки ссылки:
boost_example.cpp:(.text+0x38): undefined reference to `boost::system::get_system_category()'
boost_example.cpp:(.text+0x44): undefined reference to `boost::system::get_generic_category()'
boost_example.cpp:(.text+0x50): undefined reference to `boost::system::get_generic_category()'
boost_example.cpp:(.text+0x5c): undefined reference to `boost::system::get_generic_category()'
boost_example.cpp:(.text+0x68): undefined reference to `boost::system::get_system_category()'
поэтому я использую команду:
gnm get_system_category /usr/lib/*.a
который сообщает:
/usr/lib/libboost_filesystem.a
/usr/lib/libboost_system.a
Попытка первого из этих результатов приводит к тем же ошибкам, но второй работает:
g++ boost_example.cpp -lboost_system -o run
Я не знаю, зачем мне нужна системная библиотека там, где вам нужна файловая система; возможно разные версии Boost.
Я только что нашел самый интеллектуальный и самый официальный способ (в моей системе) выяснить флаг ссылки. Следующее действительно только для наддува в дистрибутиве Debian или производном Debian (как Kubuntu в моем случае). Другие ответы могут быть более общими для любой библиотеки в любой системе.
В зависимости от установленной версии надстройки в вашем Debian-подобном дистрибутиве может быть следующий файл:
/usr/share/doc/libboost1.38-doc/README.Debian
, часть которого гласит:
-------- The following table shows which components use a library (shared or static) and the corresponding "-l" flag. Note that only the multithreaded version of the libraries is shipped. Component Link Flag Library Type --------- --------- ------------ Boost.Date_Time -lboost_date_time-mt static shared Boost.Filesystem -lboost_filesystem-mt static shared Boost.Graph -lboost_graph-mt static shared Boost.IOStreams -lboost_iostreams-mt static shared Boost.Math -lboost_math_c99-mt static shared -lboost_math_c99f-mt static shared -lboost_math_c99l-mt static shared Boost.MPI -lboost_mpi-mt static shared Boost.Program_options -lboost_program_options-mt static shared Boost.Python -lboost_python-mt-py24 static shared -lboost_python-mt-py25 static shared Boost.Regex -lboost_regex-mt static shared Boost.Serialization -lboost_serialization-mt static shared -lboost_wserialization-mt static shared Boost.Signals -lboost_signals-mt static shared Boost.System -lboost_system-mt static shared Boost.Test -lboost_prg_exec_monitor-mt static shared -lboost_unit_test_framework-mt static shared Boost.Thread -lboost_thread-mt static shared Boost.Wave -lboost_wave-mt static shared
Нужно было только найти подходящее место для документации!
dpkg -L libboost-filesystem-dev
Другая возможность - использовать pkg-config. Это программа, которая помогает определять флаги компиляции для определенных библиотек (хотя она не поддерживает ускорение в Ubuntu)
Вы можете использовать Autoconf - макрос, который проверяет ускорение, можно найти здесь . Использование Autoconf помогает сохранить независимость вашей платформы / дистрибутива источников.