import csv
import sys
import typing
import json
def deep_walk(j, path=()):
if isinstance(j, dict):
for k, v in j.items():
yield from deep_walk(v, path + (f'.{k}',))
elif isinstance(j, list):
for i, v in enumerate(j):
yield from deep_walk(v, path + (f'[{i}]',))
else:
yield path, j
def json2csv(data: typing.Union[dict, list], dest: typing.TextIO = None):
field_set = set()
records = []
if isinstance(data, dict):
data = [data]
for item in data:
record = {''.join(path).lstrip('.'): value for path, value in deep_walk(item)}
records.append(record)
field_set.update(record.keys())
w = csv.DictWriter(dest or sys.stdout, fieldnames=list(sorted(field_set)))
w.writeheader()
w.writerows(records)
if __name__ == '__main__':
if sys.argv[1:]:
with open(sys.argv[1]) as f:
json2csv(json.load(f))
else:
json2csv(json.load(sys.stdin))
Как вывести первый ключ из словаря?
Как вывести только 'Pomidorka' из словаря?
list(users.keys()) # ['Ivan', 'Anton', 'Pomidorka', 'Ananas']
list(users.keys())[0]
list(users.keys())[2]
users = ["Андрей", "София", "Cветлана", "Валерий", "Илья", "Mаксим", "Дмитрий", "Лиза"]
trans_table = str.maketrans(
'ABCEHKMOPTXacekmopuxy',
'АВСЕНКМОРТХасекмориху',
)
russian_letters_normalizer = lambda s: s.translate(trans_table) if isinstance(s, str) else s
print('Original:', users)
print('Sorted: ', list(sorted(users, key=russian_letters_normalizer)))
import telebot
import requests
import pprint
import time
botToken = "token"
chanelName = "@wo"
class Bot:
def __init__(self,nameChanel,token):
# todo: проверьте pep8: форматирование (пробелы, indent=4), нейминг (CamelCase vs snake_case)
self.name = nameChanel
self.bot = telebot.TeleBot(token)
# todo: Неадекватное имя bot. Вызывает путаницу в связи с именем класса Bot
#self.source = source
def getIDGroup(self,str):
# todo: str - это встроенный тип, по смыслу должно быть ясно, что можно итерировать
arr = []
# todo: Неадекватное имя arr. Имя должно указывать не на тип, а на суть того, что поименовано.
for nameGroup in str:
url = f"url" # todo: Зачем тут форматная строка, если нет переменных? Видимо ошибка.
response = requests.get(url).json()['response']['object_id']
# todo: Где проверка ответа на ошибки?
# todo: Неадекватное имя. Назовите object_id
arr.extend(self._getPostsGroup(response))
return self._editPosts(arr)
def _getPostsGroup(self,number):
# todo: Неадекватное имя number. Назовите group_id
number = str(number)
url = f"url"
response = requests.get(url).json()['response']['items']
# todo: Неадекватное имя. Назовите object_id
return response
def _editPosts(self,posts):
with open('id.txt','r') as file:
list = file.read().split()
# todo: имя переменной перекрывает встроенный тип, не отражает содержимое
# todo: Зачем read и split, если можно list(file) и идентификаторы хранить в строках?
file.close()
# todo: Зачем close, если with?!
for item in posts:
count = list.count(str(item['id']))
# todo: Зачем вам тут count, если нужна лишь проверка на вхождение?
if count:
continue
photo = ""
# todo: почему не None?
for img in item['attachments'][0]['photo']['sizes']:
if img['height'] > 300:
photo = img['url']
break
text = item['text']
self._sendMessageBot(text,photo)
with open('id.txt','a') as file:
# todo: ну использовали бы уже хотя бы shelve
file.write(str(item['id'])+' ')
file.close()
# todo: опять close
def _sendMessageBot(self,text,photo):
if photo:
if text:
self.bot.send_photo(self.name,photo,caption=text)
return
else:
self.bot.send_photo(self.name,photo)
if text:
self.bot.send_message(self.name,text)
# Функция могла выглядеть так:
# if photo:
# self.bot.send_photo(self.name, photo, caption=text)
# elif text:
# self.bot.send_message(self.name, text)
# Но лучше не допускать вызова с пустыми аргументами. Это бессмысленно и плохо
bot = Bot(chanelName, botToken)
# вот как понимать такое: bot.bot? Нейминг!!!
posts = bot.getIDGroup() #name of group
x = input()
print('Text from input:', x)
echo the string for python | python my_python_script.py
x = input()
y = input()
z = input()
rest = []
while z != 'END':
rest.append(z)
z = input()
print('x=', x, 'y=', y)
print('rest=', rest)
echo The X string
echo The Y string
echo Other string 1
echo line 2
echo line 3
echo line 4
echo END
my_script.bat | python.exe my_python_script.py
echo text to write into the file > the_file.txt
c:/program files/rar/rar.exe
rar_command = '"c:/program files/rar/rar.exe" a -ag {}.rar {}'.format(target_dir,source)
import sys
import re
import json
r1 = re.compile(
r"(?P<who>\S*) has (?P<ncalls>\d*) calls \(max (?P<maxcalls>\S*)\) in \'(?P<start>\S*)\' strategy \((?P<holdtime>\S*) holdtime, (?P<talktime>\S*) talktime\), W:(?P<w>\d*), C:(?P<c>\d*), A:(?P<a>\d*), SL:(?P<sl>\S*) within (?P<within>\S*)\s*$"
)
with open('ast.txt') as f:
js = []
append_to = []
m = None
for l in f:
m = r1.match(l)
if m:
js.append(dict(members=[], callers=[], **m.groupdict()))
m = None
elif 'No Members' in l or 'No Callers' in l:
pass
elif 'Members:' in l:
append_to = js[-1]['members']
elif 'Callers:' in l:
append_to = js[-1]['callers']
elif l.strip():
append_to.append(l)
print(json.dumps(js, indent=2))
cat logfile.log | py -x "getattr(re.match('^(\S+) has (\S+) calls.*$', x), 'groups', lambda: None)()" | py -x "dict([eval(x)])"
cat logfile.log | py -x "'{{\"{0}\": \"{1}\"}}'.format(*x.split()) if x.split()[1:2] == ['has'] and x.split()[3:4] == ['calls'] else None"
mount --bind /source/dir /destination/dir
/source/dir /destination/dir none defaults,bind 0 0