#python #arrays #numpy
#python #массивы #numpy
Вопрос:
Мне нужно удалить определенные одинарные кавычки и пробелы, а также зафиксировать количество вхождений определенного символа, а затем переместить это в два столбца файла csv.
Используя ниже:
a = []
for linenumber,line in enumerate(orig):
if linenumber >2 and linenumber <7:
a.append(np.array(list(orig[linenumber])))
print(np.array(a).T)
Я получаю:
[[' ' ' ' ' ' ' ']
['3' '1' '7' '3']
[' ' '1' '2' '1']
[' ' ' ' '5' '5']]
Вместе с отдельным массивом (b), используя тот же метод в том же формате с переменным количеством символов и пробелов в каждой строке.
Как мне создать csv, в котором один столбец содержит (a), а второй — количество X в каждой строке из массива numpy? Я прошу прощения, я очень новичок в этом, заранее благодарю вас.
Например, мне нужно что-то похожее на приведенное ниже:
' ', '0'
'3173', '3'
'121', '6'
'55', '9'
Ответ №1:
Python имеет встроенные инструменты для обработки строк и подсчета подстрок. Вот несколько примеров того, как вы можете их использовать:
my_string = "Walla Walla, Washington"
# You can count how many times a certain substring occurs in a string
Wa_count = my_string.count("Wa")
print(Wa_count) # 3 times
ll_count = my_string.count("ll")
print(ll_count) # 2 times
Вы можете объединять списки строк вместе с разделителем по вашему выбору. У каждой строки есть .join()
метод, который принимает итерируемый объект, элементы которого все являются строками, и объединяет их вместе с исходной строкой в качестве разделителя. Пример, вероятно, демонстрирует это лучше всего:
alist = ["John", "Mary", "Jane"]
with_ands = " and ".join(alist)
print(with_ands)
# "John and Mary and Jane"
atuple = ("John", "Mary", "Jane")
with_comma_space = ", ".join(atuple)
print(with_comma_space)
# "John, Mary, Jane"
some_date = ["04", "04", "2019"]
date_hyphen = "-".join(some_date)
print(date_hyphen)
# "04-04-2019"
import numpy as np
# This even works with empty strings
np_arr = np.array(['3', '1', '7', '3'])
np_array_example = ''.join(np_arr)
print(np_array_example)
# "3173"
Не забывайте всегда передавать массив / список / кортеж / dict, который состоит только из строк. Вы можете прочитать больше о строках здесь: https://docs.python.org/3/library/stdtypes.html#string-methods
Наконец, .strip()
в строках удаляются пробелы с обеих сторон. Кроме того, поскольку .join()
возвращает строку, вы можете объединять и объединять вместе. Связывание всего этого вместе:
my_list = [[' ', ' ', ' ', ' '], ['3', '1', '7', '3'], [' ', '1', '2', '1'], [' ', ' ', '5', '5']]
for inner_list in my_list:
result = ''.join(inner_list).strip()
print(result)
Это будет напечатано, начиная с пустой строки, потому что первым результатом является пустая строка ""
:
3173
121
55
Python также имеет встроенный csv-модуль. Взято непосредственно из руководства: https://docs.python.org/3/library/csv.html
import csv
with open('eggs.csv', 'w', newline='') as csvfile:
spamwriter = csv.writer(csvfile, delimiter=' ',
quotechar='|', quoting=csv.QUOTE_MINIMAL)
spamwriter.writerow(['Spam'] * 5 ['Baked Beans'])
spamwriter.writerow(['Spam', 'Lovely Spam', 'Wonderful Spam'])
Это запишет
Spam, Spam, Spam, Spam, Spam, Baked Beans
Spam, Lovely Spam, Wonderful Spam
Итак, по сути, все, что вам нужно сделать, это передать spammwriter.writerow()
список строк, где каждая строка представляет собой столбец.