读取数据的程序,按分隔符分割,删除空格然后计数
Program to read data, split by delimiter, remove white spaces then count
我有一个正在处理的程序,我需要读取一个 .txt 文件,该文件包含多行数据,如下所示:
[ABC/DEF//25GHI////JKLM//675//]
我下面的程序可以在新的一行上打印每个序列以供分析,但是函数是我遇到问题的地方。我可以让它删除单个数值“675”并保留字母数字值。 (从样本中删除 675)
a = "string.txt"
file1 = open(a, "r")
with open(a, 'r') as file:
lines = [line.rstrip('\n') for line in file]
print(*lines, sep = "\n")
cleaned_data = []
def split_lines(lines, delimiter, remove = '[0-9]+$'):
for line in lines:
tokens = line.split(delimiter)
tokens = [re.sub(remove, "", token) for token in tokens]
clean_list = list(filter(lambda e:e.strip(), tokens))
cleaned_data.append(clean_list)
print(clean_list) # Quick check if function works
split_lines(lines, "/")
这会像这样打印出分隔的行,删除
空格(其中“/”和数值)
["ABC", "DEF", "25GHI", "JKLM"]
然后我要做的是使用包含这些新分隔行的“cleaned_data”列表,并对它们进行量化以输出:
4x ["ABC", "DEF", "25GHI", "JKLM"]
接下来我可以使用“cleaned_data”做什么来读取每一行并打印重复字符串的计数?
from pprint import pprint
unique_data = {}
cleaned_data = [1, 2, 3, 4, 5, 'a', 'b', 'c', 'd', 3, 4, 5, 'a', 'b', [1, 2,
],
[1, 2, ]]
for item in cleaned_data:
key = str(item) # convert mutable objects like list to immutable string.
if not unique_data.get(key): # key does not exist
unique_data[key] = 1, item # Add count of 1 and the data
else: # A duplicate has been encountered
# Increment the count
unique_data[key] = (unique_data[key][0] + 1), item
for k, v in unique_data.items():
print(f"{v[0]}:{v[1]}")
输出:
1:1
1:2
2:3
2:4
2:5
2:a
2:b
1:c
1:d
2:[1, 2]
如果您只需要删除重复项:
deduped_row_of_cleaned_data = list(set(row_of_cleaned_data))
如果您需要知道有多少重复项,只需从 len(row_of_cleaned_data) 中减去 len(deduped_row_of_cleaned_data)。
如果您需要对所有重复项进行计数,您可以创建一个从已删除重复数据的行中分配空字典的列表:
empty_dict=dict.from_keys(list(set(row_of_cleaned_data)),[])
然后遍历列表以添加每个值:
for item in row_of_cleaned_data:
empty_dict[item].append(item)
通过字典循环获取计数:
for key, value in empty_dict.items():
empty_dict[key] = len(value)
之后,您在
中获得了去重数据
list(empty_dict.keys())
以及
中每个项目的计数
list(empty_dict.values()).
我有一个正在处理的程序,我需要读取一个 .txt 文件,该文件包含多行数据,如下所示:
[ABC/DEF//25GHI////JKLM//675//]
我下面的程序可以在新的一行上打印每个序列以供分析,但是函数是我遇到问题的地方。我可以让它删除单个数值“675”并保留字母数字值。 (从样本中删除 675)
a = "string.txt"
file1 = open(a, "r")
with open(a, 'r') as file:
lines = [line.rstrip('\n') for line in file]
print(*lines, sep = "\n")
cleaned_data = []
def split_lines(lines, delimiter, remove = '[0-9]+$'):
for line in lines:
tokens = line.split(delimiter)
tokens = [re.sub(remove, "", token) for token in tokens]
clean_list = list(filter(lambda e:e.strip(), tokens))
cleaned_data.append(clean_list)
print(clean_list) # Quick check if function works
split_lines(lines, "/")
这会像这样打印出分隔的行,删除 空格(其中“/”和数值)
["ABC", "DEF", "25GHI", "JKLM"]
然后我要做的是使用包含这些新分隔行的“cleaned_data”列表,并对它们进行量化以输出:
4x ["ABC", "DEF", "25GHI", "JKLM"]
接下来我可以使用“cleaned_data”做什么来读取每一行并打印重复字符串的计数?
from pprint import pprint
unique_data = {}
cleaned_data = [1, 2, 3, 4, 5, 'a', 'b', 'c', 'd', 3, 4, 5, 'a', 'b', [1, 2,
],
[1, 2, ]]
for item in cleaned_data:
key = str(item) # convert mutable objects like list to immutable string.
if not unique_data.get(key): # key does not exist
unique_data[key] = 1, item # Add count of 1 and the data
else: # A duplicate has been encountered
# Increment the count
unique_data[key] = (unique_data[key][0] + 1), item
for k, v in unique_data.items():
print(f"{v[0]}:{v[1]}")
输出:
1:1
1:2
2:3
2:4
2:5
2:a
2:b
1:c
1:d
2:[1, 2]
如果您只需要删除重复项:
deduped_row_of_cleaned_data = list(set(row_of_cleaned_data))
如果您需要知道有多少重复项,只需从 len(row_of_cleaned_data) 中减去 len(deduped_row_of_cleaned_data)。
如果您需要对所有重复项进行计数,您可以创建一个从已删除重复数据的行中分配空字典的列表:
empty_dict=dict.from_keys(list(set(row_of_cleaned_data)),[])
然后遍历列表以添加每个值:
for item in row_of_cleaned_data:
empty_dict[item].append(item)
通过字典循环获取计数:
for key, value in empty_dict.items():
empty_dict[key] = len(value)
之后,您在
中获得了去重数据 list(empty_dict.keys())
以及
中每个项目的计数 list(empty_dict.values()).