Mam to, że wygląda tak w pliku .txt:
a
baby
*
27
int
Po przeczytaniu w pliku, w jaki sposób chodzę na oddzielenie tej listy na listę 5 innych list? Na przykład,
char_list = ['a']
str_list = ['baby']
special = ['*']
digit = [27]
data_type = ['int']
Czy w Pythonie jest specjalna funkcja? Nie chcę robić czegoś podobnego
# I don't even know if this is legal
new_array = []
for x in foo:
if x in "*"
new_array.append(x)
Po wykonaniu:
strz = [item for item in text if isinstance(item,str)]
print strz
Mówi mi, że wszystkie są ciągi.
2 odpowiedzi
Oto funkcja sprawdzająca wejście dla tego typu, jak określono powyżej (z dodatkiem pływaków).
def type_check(x):
if not x:
return 'none'
try:
int(x)
return 'int'
except:
pass
try:
float(x)
return 'float'
except:
pass
if len(x)==1:
if x.isalpha():
return 'char'
else:
return 'special'
if x in ('int','float','str'):
return 'data_type'
return 'str'
Teraz możesz utworzyć słownik, aby śledzić każdy typ.
from collections import defaultdict
type_dict = defaultdict(list)
# create a variable that mimics your file...
f = '''a
baby
*
27
int'''.split()
for line in f:
t = type_check(line.strip())
type_dict[t].append(line.strip())
type_dict
# returns:
defaultdict(list,
{'char': ['a'],
'data_type': ['int'],
'int': ['27'],
'special': ['*'],
'str': ['baby']})
Możesz napisać własny parser, ale nie proponuję tego. Tylko jeśli nalegasz - tutaj jest przykład SoulTion:
from collections import defaultdict
from string import punctuation
from string import ascii_letters
def parser(lines):
parsed = defaultdict(list)
for line in lines.splitlines():
if line.isdigit():
parsed['digits'].append(int(line))
elif len(line) == 1:
if line in ascii_letters:
parsed['chars'].append(line)
elif line in punctuation:
parsed['specials'].append(line)
else:
if line in __builtins__:
parsed['types'].append(line)
else:
parsed['strings'].append(line)
return parsed
with open(your_file) as file:
parsed = parser(file.read())
print(parsed)
Podobne pytania
Nowe pytania
python
Python to wielozadaniowy, wielozadaniowy język programowania dynamicznie typowany. Został zaprojektowany tak, aby był szybki do nauczenia się, zrozumienia i użycia oraz wymuszania czystej i jednolitej składni. Należy pamiętać, że Python 2 oficjalnie nie jest obsługiwany od 01-01-2020. Mimo to, w przypadku pytań Pythona specyficznych dla wersji, dodaj znacznik [python-2.7] lub [python-3.x]. Korzystając z wariantu Pythona (np. Jython, PyPy) lub biblioteki (np. Pandas i NumPy), należy umieścić go w tagach.