鱼C论坛

 找回密码
 立即注册
查看: 2475|回复: 7

[已解决]f-string怎么处理这种单双引号?

[复制链接]
发表于 2023-2-22 09:05:55 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 blackantt 于 2023-2-22 09:08 编辑
fr1 = '''Prométhée le lion et l'éléphant.Le lion se plaignait souvent de Prométhée, bien que Prométhée l'ait rendu grand et puissant, ait équipé ses mâchoires de dents acérées pour les armes et ses pieds de griffes puissantes, le rendant plus fort que les autres animaux. Mais il a quand même dit: "Mais j'ai toujours peur du coq." Prométhée a dit: "Pourquoi me blâmez-vous sans raison? Vous avez toutes les forces que je peux créer, mais votre caractère est trop faible." Le lion se lamentait sans cesse , s'est reproché d'être lâche et a finalement voulu chercher la mort. A ce moment, il rencontra l'éléphant, et après s'être salués, il se leva et bavarda. Voyant l'éléphant battre des oreilles, il demanda : " Qu'est-ce qui ne va pas avec toi ? Pourquoi continues-tu à secouer tes oreilles ? " L'éléphant répondit , "Voyez-vous ces moustiques bourdonnants? S'ils entrent dans mes oreilles, je serai fini." Après avoir entendu cela, le lion réalisa: "Alors pourquoi devrais-je chercher la mort?Un coq est beaucoup plus gros qu'un moustique et je suis plus heureux qu'un éléphant. "'''

print(fr1)

os.system(f'tts --voice fr-FR-HenriNeural --text "{fr1}" --write-media 1.mp3')
#原命令是  tts --voice fr-FR-HenriNeural --text "Prométhée le lion et l'éléphant.Le" --write-media 1.mp3


其中fr1的形式有可能是以下几种(既有单引号,又有双引号。而且可能在行首/尾)
Prométhée le lion et l'éléphant.Le
Prométhée le "lion et l'éléphant.Le"
Prométhée le lion et l'éléphant.Le'

"Prométhée le lion" et l'éléphant.Le


或者不用f-string也行,用 format也行。怎么才能不冲突?
最佳答案
2023-2-22 09:25:15
blackantt 发表于 2023-2-22 09:20
fr1 ='''  aaa' '''
fr1 ="""  aaa" """

如果是跟 python 字符串的那个双引号冲突了,那你只能给最后一个加上转义,replace('"', '\"') 只是解决 windows 命令的双引号冲突

比如
fr1 ='''  aaa''''
fr1 ="""  aaa""""
你就在最后一个引号加 \
fr1 ='''  aaa\''''
fr1 ="""  aaa\""""
或者像你发的那个一样在后面留个空格也是可以的
fr1 ='''  aaa' '''
fr1 ="""  aaa" """
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-2-22 09:10:06 | 显示全部楼层
本帖最后由 isdkz 于 2023-2-22 09:12 编辑

主要是执行命令的时候的参数里面的双引号会跟外面的双引号冲突,你把参数里面的双引号转义了就行,也就是把 " 替换成 \" ,可以用 replace

单引号不用管,因为 --text 的参数外面的是双引号,所以只有双引号会发生冲突

对你的代码修改如下:
fr1 = '''Prométhée le lion et l'éléphant.Le lion se plaignait souvent de Prométhée, bien que Prométhée l'ait rendu grand et puissant, ait équipé ses mâchoires de dents acérées pour les armes et ses pieds de griffes puissantes, le rendant plus fort que les autres animaux. Mais il a quand même dit: "Mais j'ai toujours peur du coq." Prométhée a dit: "Pourquoi me blâmez-vous sans raison? Vous avez toutes les forces que je peux créer, mais votre caractère est trop faible." Le lion se lamentait sans cesse , s'est reproché d'être lâche et a finalement voulu chercher la mort. A ce moment, il rencontra l'éléphant, et après s'être salués, il se leva et bavarda. Voyant l'éléphant battre des oreilles, il demanda : " Qu'est-ce qui ne va pas avec toi ? Pourquoi continues-tu à secouer tes oreilles ? " L'éléphant répondit , "Voyez-vous ces moustiques bourdonnants? S'ils entrent dans mes oreilles, je serai fini." Après avoir entendu cela, le lion réalisa: "Alors pourquoi devrais-je chercher la mort?Un coq est beaucoup plus gros qu'un moustique et je suis plus heureux qu'un éléphant. "'''.replace('"', r'\"')         # 用replace 把 " 替换成 \"

print(fr1)

os.system(f'tts --voice fr-FR-HenriNeural --text "{fr1}" --write-media ./1.mp3')
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-2-22 09:12:53 | 显示全部楼层
本帖最后由 blackantt 于 2023-2-22 09:14 编辑
isdkz 发表于 2023-2-22 09:10
主要是执行命令的时候的参数里面的双引号会跟外面的双引号冲突,你把参数里面的双引号转义了就行,也就是把 ...

"'''.replace('"', r'"')  
这里首先会出问题,  fr1的结尾可能是'或者"
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-2-22 09:15:11 | 显示全部楼层
blackantt 发表于 2023-2-22 09:12
这里首先会出问题,  fr1的结尾可能是'或者"

结尾是什么没有关系呀,只要不要让双引号闭合 --text 参数最外面的双引号就可以了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-2-22 09:20:38 | 显示全部楼层
isdkz 发表于 2023-2-22 09:15
结尾是什么没有关系呀,只要不要让双引号闭合 --text 参数最外面的双引号就可以了

fr1 ='''  aaa' '''
fr1 ="""  aaa" """

这种都会出错, 字符串是  aaa'  或者  aaa"  这种
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-2-22 09:25:15 | 显示全部楼层    本楼为最佳答案   
blackantt 发表于 2023-2-22 09:20
fr1 ='''  aaa' '''
fr1 ="""  aaa" """

如果是跟 python 字符串的那个双引号冲突了,那你只能给最后一个加上转义,replace('"', '\"') 只是解决 windows 命令的双引号冲突

比如
fr1 ='''  aaa''''
fr1 ="""  aaa""""
你就在最后一个引号加 \
fr1 ='''  aaa\''''
fr1 ="""  aaa\""""
或者像你发的那个一样在后面留个空格也是可以的
fr1 ='''  aaa' '''
fr1 ="""  aaa" """
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-2-22 09:29:10 From FishC Mobile | 显示全部楼层
我比较好奇这个字符串是哪来的,如果是脚本的话应该不是手动在代码里定义的而是从某处读取的?
也许不要把命令拼接出来然后执行,而是换用参数列表的方式会更合适?您可以测试一下,这也是推荐的替代 os.system 的方法
https://docs.python.org/3/library/subprocess.html#subprocess.Popen
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-2-22 11:56:32 | 显示全部楼层
本帖最后由 blackantt 于 2023-2-22 11:57 编辑
isdkz 发表于 2023-2-22 09:25
如果是跟 python 字符串的那个双引号冲突了,那你只能给最后一个加上转义,replace('"', '\"') 只是解决  ...


目前,试了半天,下面的2种  双斜杠 都可以
fr1 = '''et l'éléphant.Le lion  l'ait. Mais  dit: "Mais j'ai coq." Prométhée a dit: "Pourquoi me raison? Vous." Le lion se cesse , s'est reproché d'être  l'éléphant, et , bavarda. Voyant l'éléphant oreilles, il demanda : " Qu'est-ce  toi ? Pourquoi  oreilles ? " L'éléphant répondit , "Voyez-vous bourdonnants? S'ils , je serai fini." Après cela, le lion réalisa: "Alors  mort?Un  qu'un éléphant. '''

fr2 = '.' + fr1.replace('"','\\"') + '.'
fr3 = fr1.replace('"','\\"')

os.system(f"""tts --voice fr --text "{fr3}" --write-media 4111.mp3""")
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-9-24 13:23

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表