2013-12-22 2 views
0

Мне был рекомендован какой-то код от кого-то здесь, но мне все еще нужна помощь. Вот код, который был рекомендован:Чтение/Запись/Добавление с использованием модуля json

import json 
def write_data(data,filename): 
    with open(filename,'w') as outfh: 
     json.dump(data,outfh) 

def read_data(filename): 
    with open(filename, 'r') as infh: 
     json.load(infh) 

написания кода работает отлично, но код чтения не возвращает строки после ввода данных:

read_data('player.txt') 

Другое дело, что я хотел бы быть в состоянии сделать это, чтобы иметь возможность указать строку для печати. Что-то, что также очень важно для этого проекта/exorcise, - это возможность добавлять строки в мой файл. Спасибо всем, кто может мне помочь.

Редактировать: Мне нужно хранить строки в файле, которые я могу преобразовать в значения. IE;

name="Karatepig" 

Что-то я бы хранить, так что я могу вспомнить данные, если я когда-нибудь понадобится, чтобы загрузить предыдущий набор данных или что-то в этом роде.

Я очень люблю noop на python, поэтому не знаю, что было бы лучше, будь то список или словарь; Я раньше не использовал словарь, и еще не знаю, как я собираюсь преобразовать строки в значения.

+0

Вам нужно присвоить результат переменной: 'data = readdata ('player.txt')'. –

+0

Вам нужно будет показать нам, какие данные вы пишете; это словарь, список, то, что * содержится * в данных, которые вы пишете и читаете? –

+0

Отредактировано. Опять же, у меня в основном есть только 3 часа рабочего времени на питоне, так что успокойтесь, хе-хе. – Karatepig

ответ

0

Предположим, у вас есть словарь, как это:

data = {'name': 'Karatepig', 'score': 10} 

Ваша write_data функция хорошо, но ваша read_data функция должна фактически вернуть данные после чтения из файла:

def read_data(filename): 
    with open(filename, 'r') as infh: 
     data = json.load(infh) 
    return data 

data = read_data('player.json') 

сейчас предположим, что вы хотите напечатать имя и обновить счет:

print data['name'] 
data['score'] += 5 # add 5 points to the score 

Затем вы можете записать данные на диск с помощью функции write_data. Вы не можете использовать модуль json для добавления данных в файл. Вам нужно действительно прочитать файл, изменить данные и снова записать файл. Это не так плохо для небольших объемов данных, но рассмотрите возможность использования базы данных для более крупных проектов.

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

Непонятно, что вы подразумеваете под «преобразовать строки в значения». Обратите внимание, что приведенный выше код показывает строку «Karatepig», используя ключ словаря «name».

+0

Это именно то, что мне нужно. Огромное спасибо. Однако есть одна проблема; когда я читаю данные, я получаю это «u» там. Может ли это быть исправлено? – Karatepig

+0

@Karatepig: Это означает, что у вас есть строка в Юникоде. Вам не нужно беспокоиться об этом, если вы не смешиваете строки байтов (без префикса 'u') и строки unicode со значениями вне диапазона ASCII. –

+0

@Karatepig: Если вас интересует разница, см. Http://docs.python.org/2/howto/unicode.html. Модуль 'json' возвращает строки unicode, поскольку стандарт JSON указывает, что строки являются Unicode, всегда. –

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