Я изучаю Python (у меня есть опыт работы с C / C ++).
Мне нужно написать что-то практичное на Python, пока я учусь. У меня есть следующий псевдокод (моя первая попытка написания скрипта на Python после вчерашнего чтения о Python). Надеюсь, фрагмент детализирует логику того, что я хочу сделать. Кстати, я использую Python 2.6 на Ubuntu Karmic.
Предположим, что скрипт вызывается как: script_name.py directory_path
import csv, sys, os, glob
# Can I declare that the function accepts a dictionary as first arg?
def getItemValue(item, key, defval)
return !item.haskey(key) ? defval : item[key]
dirname = sys.argv[1]
# declare some default values here
weight, is_male, default_city_id = 100, true, 1
# fetch some data from a database table into a nested dictionary, indexed by a string
curr_dict = load_dict_from_db('foo')
#iterate through all the files matching *.csv in the specified folder
for infile in glob.glob( os.path.join(dirname, '*.csv') ):
#get the file name (without the '.csv' extension)
code = infile[0:-4]
# open file, and iterate through the rows of the current file (a CSV file)
f = open(infile, 'rt')
try:
reader = csv.reader(f)
for row in reader:
#lookup the id for the code in the dictionary
id = curr_dict[code]['id']
name = row['name']
address1 = row['address1']
address2 = row['address2']
city_id = getItemValue(row, 'city_id', default_city_id)
# insert row to database table
finally:
f.close()
У меня есть следующие вопросы:
Достаточно ли написан код на языке Pythonic (есть ли лучший способ его реализации)?
Учитывая таблицу со схемой, подобной показанной ниже, как я могу написать функцию Python, которая извлекает данные из таблицы и возвращает их в словарь, индексированный по строке (name).
Как я могу вставить данные строки в таблицу (на самом деле я хотел бы использовать транзакцию, если это возможно, и зафиксировать непосредственно перед закрытием файла)
Схема таблицы:
create table demo (id int, name varchar(32), weight float, city_id int);
Кстати, моя серверная база данных - postgreSQL
[Изменить]
Уэйн и др .:
Чтобы уточнить, что я хочу, это набор строк. Каждая строка может быть проиндексирована по ключу (что означает, что контейнер строк - это словарь (справа)? Хорошо. Теперь, когда мы получили строку с помощью ключа, я также хочу иметь возможность доступа к «столбцам» в строка - это означает, что сами данные строки представляют собой словарь. Я не знаю, поддерживает ли Python синтаксис многомерного массива при работе со словарями, - но следующее утверждение поможет объяснить, как я намерен концептуально использовать данные, возвращаемые из базы данных. набор данных ['joe'] ['weight'] сначала извлечет данные строки, проиндексированные ключом 'joe' (который является словарем), а затем проиндексирует этот словарь для ключа 'weight'. Я хочу знать, как создать такой словарь словарей из найденных данных на Pythonic, как вы делали раньше.
Упрощенным способом было бы написать что-то вроде:
import pyodbc
mydict = {}
cnxn = pyodbc.connect(params)
cursor = cnxn.cursor()
cursor.execute("select user_id, user_name from users"):
for row in cursor:
mydict[row.id] = row
Правильно ли это / можно ли написать более питонским способом?