2015-02-22 4 views
-2

У меня есть два массива, которые генерируются из веб-соскабливания каждую минуту. Их два. Как поместить их в текстовый файл? Я хочу, чтобы каждый массив занимал одну строку, и я хочу, чтобы они сохраняли свои скобки и запятые. Я не нашел большой помощи в других вопросах.Python - Как написать массив в текстовый файл?

[('76,433', '15.025'), ('99,714', '15.023'), ('44,236', '15.010'), ('718,725', '15.000'), ('30', '15.000'), ('30', '15.000'), ('15', '15.000'), ('15', '15.000'), ('15', '15.000'), ('15', '15.000'), ('60', '15.000'), ('30', '15.000'), ('15', '15.000'), ('30', '15.000'), ('30', '15.000'), ('60', '15.000'), ('30', '15.000'), ('30', '15.000'), ('15', '15.000'), ('30', '15.000')] 

[('18,622', '15.027'), ('334', '15.029'), ('3,240', '15.032'), ('11,354', '15.032'), ('13,651', '15.033'), ('96', '15.041'), ('1,997', '15.051'), ('1,760', '15.051'), ('500', '15.052'), ('16,000', '15.053'), ('272', '15.091'), ('3,834', '15.097'), ('8', '15.125'), ('634', '15.141'), ('794', '15.143'), ('528', '15.149'), ('220', '15.150'), ('94', '15.159'), ('91', '15.164')] 
+1

Почему имеет значение, что они являются массивами? Вы можете привязать их к строкам и записать их в текстовый файл, как и любой другой текст. –

+0

Они будут доступны другим сервером с Rbx.Lua, поэтому я хочу, чтобы они были организованы, поэтому для другого сервера проще использовать числа. – GShocked

ответ

2

Учитывая, что вы хотите, чтобы файл использовался сценарием Rbx.Lua, вам может быть лучше использовать JSON.

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

Использование JSON легко:

Python:

import json 

l = [('76,433', '15.025'), ('99,714', '15.023'), ('44,236', '15.010'), ('718,725', '15.000'), ('30', '15.000'), ('30', '15.000'), ('15', '15.000'), ('15', '15.000'), ('15', '15.000'), ('15', '15.000'), ('60', '15.000'), ('30', '15.000'), ('15', '15.000'), ('30', '15.000'), ('30', '15.000'), ('60', '15.000'), ('30', '15.000'), ('30', '15.000'), ('15', '15.000'), ('30', '15.000')] 

with open('l.json', 'w') as outfile: 
    json.dump(l, outfile) 

$ cat l.json 
[["76,433", "15.025"], ["99,714", "15.023"], ["44,236", "15.010"], ["718,725", "15.000"], ["30", "15.000"], ["30", "15.000"], ["15", "15.000"], ["15", "15.000"], ["15", "15.000"], ["15", "15.000"], ["60", "15.000"], ["30", "15.000"], ["15", "15.000"], ["30", "15.000"], ["30", "15.000"], ["60", "15.000"], ["30", "15.000"], ["30", "15.000"], ["15", "15.000"], ["30", "15.000"]] 

http://wiki.roblox.com/index.php?title=JSON См для конца Rbx.Lua; вы должны использовать DecodeJSON() для преобразования в таблицу Lua.

+0

Новая строка ('' \ n'') не может находиться внутри строки json, поэтому вы всегда можете записать json-документ в виде одной строки (новая строка будет экранирована: 'r '\ n''). Хотя вы должны быть осторожны с новыми символами Unicode, такими как ('' \ u2028''), если вы используете 'verify_ascii = False' (по умолчанию используется' verify_ascii = True', так что он представляется как 'r '\ u2028'' и там это не проблема). btw, чтобы записать в файл, вы можете передать объект напрямую: 'json.dump (l, outfile)' вместо создания промежуточной строки. – jfs

+0

@ J.F.Sebastian: спасибо за это ... Я забыл про 'dump()'. – mhawke

+0

@mhawke: Спасибо за помощь. Я буду использовать JSON завтра (сейчас 23:40). Тем временем я запускаю свою программу в течение 24 часов и записываю каждую минуту, поэтому я знаю, когда общие максимумы и минимумы для ставок. Я также попробую 'dump()' и поставит ваш ответ как лучший ответ, если я смогу заставить его работать завтра. – GShocked

0

вы можете конвертировать их в Силе, а затем записать в файл: Demo:

f = open('your_file', 'w') 
a = ['1', '2', '3'] 
f.write(str(a)+"\n") 

при чтении обратно вы можете использовать ast.literal_eval

import ast 
f = open("your_file") 
for x in f: 
    x = ast.literal_eval(x.strip()) 
    # now do your stuff 
+0

Я хочу, чтобы они сохраняли свои скобки и запятые. Мне также нужно, чтобы они были в одной строке. Спасибо за ваш ответ. – GShocked

+0

@GShocked ничего не будет потеряно, дайте ему попробовать – Hackaholic

1

Попробуйте использовать функцию repr, как это , он сохранит структуру массива в целости и сохранности:

v = [('76,433', '15.025'), ('99,714', '15.023'), ('44,236', '15.010'), ('718,725', '15.000'), ('30', '15.000'), ('30', '15.000'), ('15', '15.000'), ('15', '15.000'), ('15', '15.000'), ('15', '15.000'), ('60', '15.000'), ('30', '15.000'), ('15', '15.000'), ('30', '15.000'), ('30', '15.000'), ('60', '15.000'), ('30', '15.000'), ('30', '15.000'), ('15', '15.000'), ('30', '15.000')] 
f.write(repr(v)) 

Подробнее об этом here.

+0

Спасибо, република сохранила все и поместила в одну строку. – GShocked

+0

Добро пожаловать, рад, что это сработало :) –

+0

@GShocked: вместо 'repr()' вы могли бы использовать более переносимый формат 'json' здесь (http://stackoverflow.com/a/28653612/4279).). – jfs

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