reprlib
, pprint
, textwrap
, locale
usw.
import reprlib
import pprint
import textwrap
import locale
#Reprlib ist Repr()In einer anderen Version von wird das riesige Containerteilprojekt weggelassen und angezeigt.
charset = reprlib.repr(set('supercalifragilisticexpialidocious'))
print(charset)
# {'a', 'c', 'd', 'e', 'f', 'g', ...}
#pprint zeigt die Datenstruktur leicht verständlich an
t = [[[['black', 'cyan'], 'white', ['green', 'red']], [['magenta', 'yellow'], 'blue']]]
pprint.pprint(t, width=30)
# [[[['black', 'cyan'],
# 'white',
# ['green', 'red']],
# [['magenta', 'yellow'],
# 'blue']]]
# textwrap.fill()Umschließt jeden Absatz mit der angegebenen Breite
doc = """The wrap() method is just like fill() except that it returns a list of strings instead of one big string with newlines to separate the wrapped lines."""
print(textwrap.fill(doc, width=40))
# The wrap() method is just like fill()
# except that it returns a list of strings
# instead of one big string with newlines
# to separate the wrapped lines.
#Gebietsschema ist eine nationale Vertretung(Einheit usw.)Kann angerufen werden
locale.setlocale(locale.LC_ALL, 'English_United States.1252')
conv = locale.localeconv()
x = 1234567.8
print(locale.format("%d", x, grouping=True))
# 1,234,567
print(locale.format_string("%s%.*f", (conv['currency_symbol'], conv['frac_digits'], x), grouping=True))
# $1,234,567.80
Punkt
from string import Template
t = Template('${village}folk send $$10 to $cause.')
sentence = (t.substitute(village='Nottingham', cause='the ditch func'))
print(sentence)
# Nottinghamfolk send $10 to the ditch func.
#Ist die Ersatzmethode ein Wörterbuch mit Platzhaltern?
#Wenn Sie das Schlüsselwortargument nicht übergeben, tritt KeyError auf
# safe_Die Ersatzmethode kann sicherer sein
#Wenn keine Daten vorhanden sind, wird der Platzhalter unverändert ausgegeben
t = Template('Return the $item to $owner.')
d = dict(item='unladen swallow')
sentence = t.safe_substitute(d)
print(sentence)
# Return the unladen swallow to $owner.
Sie können auch das Trennzeichen anstelle von $ in der Vorlagenunterklasse ändern
Ändern Sie die Dateinummer
import time, os.path
from string import Template
photofiles = ['img_1074.jpg', 'img_1076.jpg', 'img_1077.jpg']
class BatchRename(Template):
delimiter = '%'
fmt = input('Wie benennst du um?(%d-Datum%n-Nummer%f-Format): ')
#Wie benennst du um?(%d-Datum%n-Nummer%f-Format): Ashley_%n%f
t = BatchRename(fmt)
date = time.strftime('%d%b%y')
for i, filename in enumerate(photofiles):
base, ext = os.path.splitext(filename)
newname = t.substitute(d=date, n=i, f=ext)
print('{0} --> {1}'.format(filename, newname))
# img_1074.jpg --> Ashley_0.jpg
# img_1076.jpg --> Ashley_1.jpg
# img_1077.jpg --> Ashley_2.jpg
Sie können die struct
modules pack ()
undunpack ()
verwenden, um Binärdatensätze variabler Länge zu verarbeiten.
Beispiel für das Schleifen jeder Header-Information der Zip-Datei
import struct
# rb:Binär lesen
with open('myfile.zip', 'rb') as f:
data = f.read()
start = 0
for i in range(3): #Zeigt die Header der ersten drei Dateien an
start += 14
fields = struct.unpack('<IIIHH', data[start:start+16])
crc32, comp_size, uncomp_size, filenamesize, extra_size = fields
start += 16
filename = data[start:start+filenamesize]
start += filenamesize
extra = data[start:start+extra_size]
print(filename, hex(crc32), comp_size, uncomp_size)
start += extra_size + comp_size #Zum nächsten Header springen
Punkt
import threading, zipfile
class AsyncZip(threading.Thread):
def __init__(self, infile, outfile):
threading.Thread.__init__(self)
self.infile = infile
self.outfile = outfile
def run(self):
f = zipfile.ZipFile(self.outfile, 'w', zipfile.ZIP_DEFLATED)
f.write(self.infile)
f.close()
print('Finished background zip of:', self.infile)
background = AsyncZip('mydata.txt', 'myarchive.zip')
background.start()
print('Das Hauptprogramm läuft')
background.join() #Warten Sie, bis die Hintergrundaufgabe abgeschlossen ist
print('Das Hauptprogramm wartete auf das Ende der Hintergrundverarbeitung')
Punkt
import logging
logging.debug('Debugging information')
logging.info('Informational message')
logging.warning('Warning: config file %s not found', 'server.conf')
logging.error('Error occurred')
logging.critical('Critical error -- shutting down')
# WARNING:root:Warning: config file server.conf not found
# ERROR:root:Error occurred
# CRITICAL:root:Critical error -- shutting down
schwachref
ermöglicht es Ihnen, ein Objekt zu verfolgen, ohne eine Referenz zu generierenimport weakref, gc
class A:
def __init__(self, value):
self.value = value
def __repr__(self):
return str(self.value)
a = A(10) #Generieren Sie eine Referenz
d = weakref.WeakValueDictionary()
d['primary'] = a #Generieren Sie keine Referenz
print(d['primary']) #Holen Sie sich das Objekt, wenn es lebt
10
del a #Referenz löschen
gc.collect() #Führen Sie die Speicherbereinigung aus
d['primary'] #Eintrag wurde automatisch gelöscht
# Traceback (most recent call last):
# File ".\weakref_sample.py", line 17, in <module>
# d['primary'] #Eintrag wurde automatisch gelöscht
# File "C:\Program Files\WindowsApps\PythonSoftwareFoundation.Python.3.7_3.7.1520.0_x64__qbz5n2kfra8p0\lib\weakref.py", line 137, in __getitem__
# o = self.data[key]()
# KeyError: 'primary'
from array import array
a = array('H', [4000, 10, 700, 22222])
print(sum(a))
# 26932
print(a[1:3])
# array('H', [10, 700])
from collections import deque
d = deque(["task1", "task2", "task3"])
d.append("task4")
print("Handling", d.popleft())
unsearched = deque([starting_node])
def breadth_first_search(unsearched):
node = unsearched.popleft()
for m in gen_moves(node):
if is_goal(m):
return m
unsearched.append(m)
heapq
Modul bietet eine Funktion, die einen Heap basierend auf einer regulären Liste implementiert.Recommended Posts