2013-04-14 2 views
0

У меня есть CSV-файл с несколькими словами, за которым следует число и нужен способ добавления числа; либо добавляя к нему 1 или установить его обратно в 1. Say, например, у меня есть такие слова:Python-Как я могу изменить часть строки в CSV-файле?

variant,1 
sixty,2 
game,3 
library,1 

Если пользователь вводит номер шестьдесят, как я мог бы использовать, чтобы добавить один на номер и как бы сбросить его до 1?

Я был повсюду в Google + Stackoverflow, пытаясь найти ответ, но я ожидаю, что я не смогу найти ответ из-за моей неопытности, чем что-либо. Спасибо.

ответ

0

Это быстрый бросок, используя fileinput. Поскольку я не знаю условий для того, почему вы уменьшили или сбросили свою ценность, я добавил ее в качестве ключевого слова arg, которое вы можете передать по своему усмотрению. Такие как

updateFileName(filename, "sixty", reset=True) 
updateFileName(filename, "sixty", decrease=True) 
updateFileName(filename, "sixty") 

Результаты каждого из них должны быть понятными. Удачи! Я завернул его в Try, поскольку я не знал, как ваша структура была, и это может привести к ее отказу в конечном счете в любом случае. Если у вас есть пробелы, вам нужно будет .strip() ключ и значение.

import fileinput 
def updateFileName(filename, input_value, decrease=False, reset=False): 
    try: 
     for line in fileinput.input(filename, inplace=True): 
      key, value = line.split(",") 
      if key == input_value: 
       if decrease: 
        sys.stdout.write("%s,%s"(key, int(value) - 1) 
       elif reset: 
        sys.stdout.write("%s,%s"(key, 1) 
       else: 
        sys.stdout.write("%s,%s"(key, int(value) + 1) 
       continue 
      sys.stdout.write(line) 

    finally: 
     fileinput.close() 
+0

Спасибо большое! Это сработало отлично! –

0

Не зная, когда вы хотите переключить число на 1, и когда вы хотите добавить 1, я не могу дать полный ответ, но я могу установить вас на правильный трек. Сначала вы хотите импортировать файл csv, чтобы его можно было изменить. Модуль csv очень полезен в этом. Читайте об этом здесь: http://docs.python.org/2/library/csv.html

Возможно, вам захочется прочитать его в структуре словаря, потому что это свяжет каждое слово с соответствующим номером. Что-то вроде этого make dictionary from csv file columns

Тогда вы будете использовать raw_input (или вход, если вы используете Python 3.0) , чтобы получить слово, которое вы ищете, и использовать его в качестве ключа, чтобы найти и изменить номер, который вы хотите изменение. http://anh.cs.luc.edu/python/hands-on/handsonHtml/handson.html#x1-490001.12 или http://www.sthurlow.com/python/lesson06/ покажет вам, как получить часть словаря, предоставив ему другую часть и как сохранить информацию обратно в словарь.

Жаль, что это не прямой ответ. Может быть, кто-то еще напишет один, но он должен вас завести,

+0

Во-первых, спасибо за быстрый и информативный ответ, я рассмотрю использование словарей. Я хочу добавить 1 к числу, когда пользователь вводит правильный ответ, и сбрасывает число до 1, когда они ошибаются. У меня уже есть функция, которая определяет, правильно ли они получили ответ, и возвращает True/False bool.Я собирался использовать это, чтобы либо добавить 1 к номеру, либо вернуть его обратно в 1, в основном, показывая, сколько раз подряд они получили это слово правильно. –

0

Это, вероятно, не самый лучший способ сделать это, но вы можете загрузить свой CSV-файл в объект массива с помощью numpy с помощью loadtxt(). Следующий код даст вам массив с двумя размерами с именами в первом столбце и вашими номерами во втором.

import numpy as np  
a = np.loadtxt('YourFile',delimiter=',') 

Выполните изменения на номера так, как вы хотите, и использовать NumPy savetxt(), чтобы сохранить файл. Если ваш файл очень полезен, это решение будет больно, так как загрузка огромного массива занимает много памяти. Поэтому рассмотрим это как обходной путь. Решение словаря на самом деле лучше (я думаю).

Смежные вопросы