字符串的相关总结
python判断字符串是否为全数字
string = '123.4500'
if string.isdigit():
print('string是全数字字符串')
if '.' in string:
integer_part, decimal_part = string.split('.')
if int(decimal_part) == 0:
result = int(string)
else:
result = float(string)
else:
print('string不是全数字字符串')
数组转字符串
arr=["dddd","ssss","dddddddddddd"]
tiaojian="---"
str_shaixuan = "|".join("%s" % tiaojian + '"' + str(i) + '"' for i in arr)
print(str_shaixuan)#---"dddd"|---"ssss"|---"dddddddddddd"
字符串模糊匹配
import difflib
config_list = ['中国工商银行', '中国农业银行', '建设银行', '中国人民银行', '招商证券', '中国农业发展银行']
query_word = '农行'
res = difflib.get_close_matches(query_word, config_list, 1, cutoff=0.1)
'''
query_word:关键字
config_list:列表
1: 返回最佳匹配个数
cutoff:定义相似度
'''
print(res)# ['中国农业银行']
利用python库:fuzzywuzzy及difflib,两个库均可实现词粒度的模糊匹配,同时可设定模糊阈值,实现关键词的提取、地址匹配、语法检查等
参考文档:https://blog.csdn.net/Lynqwest/article/details/109806055?ops_request_misc=&request_id=&biz_id=102&utm_term=difflib.get_close_matches&utm_medium=distribute.pc_search_result.none-task-blog-2~all~sobaiduweb~default-5-109806055.142^v73^insert_down3,201^v4^add_ask,239^v1^control&spm=1018.2226.3001.4187
字符串 空格, 大小写,首字母,转换大写
def str1(str):
return (str.upper())#字符串转大写
def str2(str):
return (str.lower())#符串转小写
def str3(str):
return (str.capitalize())#首字母大写
def str4(str):
return (str.isupper())#字母是否全是大写
def str5(str):
return (str.islower())#字母是否全是小写
def str6(str):
return (str.strip())#去掉字符串的左右空格
def str7(str):
return (str.lstrip())#去掉字符串的左空格
def str8(str):
return (str.rstrip())#去掉字符串的右空格
def str9(str):
return (str.isalnum())#是否全是字母和数字,并至少有一个字符
def str10(str):
return (str.isalpha())#是否全是字母
def str11(str):
return (str.isdigit())#是否全是数字
def str12(str):
return (str.isspace())#是否全是空格
def str13(str,star_str):
return (str.startswith(star_str))#判断字符串是否以某个字符串开始
def str14(str,end_str):
return (str.endswith(end_str))#判断字符串是否以某个字符串结束;
str="rpasssss"
star_str="ttt"
aa=str13(str,star_str)
print(aa)
数字,字母互相转换
sequence = list( map( lambda x: chr( x ), range( ord( 'A' ), ord( 'Z' ) + 1 ) ) )
##-----字母转数字(python实现 1-26=A-Z, then AA-AZ)
def ten2TwentySix(num):
''''
数字转换字母,输入相应的 序列 转换对应的字母; 十进制数组, 26进制字母
'''
L = []
num=num-1; #实现从1对应A
if num > 25:
while True:
d = int( num / 26 )
remainder = num % 26
if d <= 25:
L.insert( 0, sequence[remainder] )
L.insert( 0, sequence[d - 1] )
break
else:
L.insert( 0, sequence[remainder] )
num = d - 1
else:
L.append( sequence[num] )
return "".join( L )
def twentySix2Ten(letter):
'''
字母转换数字,输入相应的字母,转换对应的数值序列
:param s:
:return:
'''
l = len(letter)
sum = 1 #实现从A对应1
if l > 1:
for i in range( l - 1 ):
index = sequence.index( letter[i] )
print( index )
num = pow( 26, l - 1 ) * (index + 1)
print( num )
l = l - 1
sum = sum + num
sum = sum + sequence.index( letter[-1] )
else:
sum = sum + sequence.index( letter[-1] )
return sum
字符串相似度对比
import difflib
def get_equal_rate(str1, str2):
return difflib.SequenceMatcher(None, str1, str2).quick_ratio()
字符串 量化编辑距离,可用于字符串的完全对比
'''
https://zhuanlan.zhihu.com/p/272507386
量化,编辑距离;
'''
import numpy as np
def levenshtein_distance_dp(stra, s2):
m = len(stra) + 1
n = len(s2) + 1
# print(m)
# print(n)
dp_table = np.zeros((m,n))
# print(dp_table)
# 初始化
for i in range(m):
dp_table[i, 0] = i
for i in range(n):
dp_table[0, i] = i
for i in range(1, m):
for j in range(1, n):
dp_table[i, j] = min(
dp_table[i - 1, j] + 1,
dp_table[i, j - 1] + 1,
dp_table[i - 1, j - 1] + (1 if stra[i - 1] != s2[j - 1] else 0),
)
return int(dp_table[m - 2, n - 2])
# stra="你好啊我是小美"
# s2="saaaaaaaaaaaaaaaadfasdfadsfadsfadsfads"
# aa=levenshtein_distance_dp(stra, s2)
# print(aa)
判断每个字符串是否为字母 如果是字母就转大写
可以使用字符串的 isalpha() 方法判断每个字符串是否为字母,如果是字母,则使用 upper() 方法将其转换为大写。以下是示例代码:
string = 'abc123DEF456'
new_string = ''
for char in string:
if char.isalpha():
new_string += char.upper()
else:
new_string += char
print(new_string)#ABC123DEF456
还有一个方法 就是使用any()函数
s="dafAd您好/fdsaf ds "
if any(c.isalpha() for c in s):
s = s.upper()
print(s)#DAFAD您好/FDSAF DS
dataframe转换小写字母转换大写
dataframe里面 判断款式列中每个字符串里面是否包含字母 如果包含全部转换大写
在判断字符串是否包含字母时,应该使用 any() 函数而不是 all() 函数。因为 all() 函数只有在所有字符都是字母时才会返回 True,而 any() 函数只要有一个字符是字母就会返回 True。
import pandas as pd
# 创建示例数据
data = {'款式': ['abc123', 'DEF456', '789xyz']}
df = pd.DataFrame(data)
# 使用 apply() 方法对款式列进行操作
df['款式'] = df['款式'].apply(lambda x: x.upper() if any(char.isalpha() for char in x) else x)
# 输出结果
print(df)
'''
款式
0 ABC123
1 DEF456
2 789XYZ
'''
否存在数字字符
str_1 = "hello"
result = any(char.isdigit() for char in str_1)
print(result) # False
str_2 = "python3"
result = any(char.isdigit() for char in str_2)
print(result) # True
上面的代码中,首先定义了两个字符串 str_1 和 str_2。然后使用生成器表达式判断字符串中是否存在数字字符。当字符串中至少有一个数字字符时,any() 函数返回 True,否则返回 False。在第一个示例中,字符串 str_1 中不存在数字字符,因此 any() 函数返回 False。在第二个示例中,字符串 str_2 中存在数字字符 3,因此 any() 函数返回 True。
对于 all() 函数,如果字符串中的所有字符都满足某种条件,它就会返回 True,否则返回 False。例如:
字符串中的每个字符是否都是字母
str_3 = "python"
result = all(char.isalpha() for char in str_3)
print(result) # True
str_4 = "python3"
result = all(char.isalpha() for char in str_4)
print(result) # False
上面的代码中,同样定义了两个字符串 str_3 和 str_4。然后使用生成器表达式判断字符串中的每个字符是否都是字母。当字符串中的所有字符都是字母时,all() 函数返回 True,否则返回 False。在第一个示例中,字符串 str_3 中所有字符都是字母,因此 all() 函数返回 True。在第二个示例中,字符串 str_4 中存在数字字符 3,因此 all() 函数返回 False。
总之,any() 和 all() 函数都可以用于字符串,只需要将字符串看作一个包含多个字符的可迭代对象即可。
字符串中 以关键字前面指定符号进行分割为两个字符串
def split_text(text, keyword,separator):
'''
:param text: 文本
:param keyword: 关键字
:param separator: 风格符
:return:
'''
# 定位关键字的位置
keyword_index = text.find(keyword)
if keyword_index != -1:
# 在关键字位置之前搜索最近的句号
dot_index = text.rfind(separator, 0, keyword_index)
if dot_index != -1:
# 使用句号位置将文本分割为两部分
part1 = text[:dot_index+1]
part2 = text[dot_index+1:]
return part1, part2
# 如果未找到关键字或句号,则返回整个文本作为第一部分,第二部分为空字符串
return text, ''
# 测试示例
text = "对上游端形成挤压。港口面震荡,周内现货市场表现一般。基差显弱;受制发随盘货缩量影响等,周内港口库存延续累积。后续继续随盘关注到港、烯烃项目运行等。"
keyword = "随盘"
separator = '。'
part1, part2 = split_text(text, keyword,separator)
print(part1) # 对上游端形成挤压。港口面震荡,周内现货市场表现一般。
print(part2) # 基差显弱;受制发随盘货缩量影响等,周内港口库存延续累积。后续继续随盘关注到港、烯烃项目运行等。