似乎有两种不同的方法将字符串转换为字节,如TypeError的答案所示:'str'不支持缓冲区接口
哪种方法更好或更好Pythonic?或者只是个人喜好?
b = bytes(mystring, 'utf-8')
b = mystring.encode('utf-8')
Run Code Online (Sandbox Code Playgroud) 我知道/在Linux中是非法的,以下在Windows中是非法的(我认为) * . " / \ [ ] : ; | , *
我还缺少什么?
但是,我需要一个全面的指南,并且需要考虑双字节字符.链接到外部资源对我来说没问题.
我需要首先使用可能包含禁用字符的名称在文件系统上创建一个目录,所以我打算用下划线替换这些字符.然后我需要将此目录及其内容写入zip文件(使用Java),因此有关zip目录名称的任何其他建议将不胜感激.
我想在我的应用程序中包含批处理文件重命名功能.用户可以键入目标文件名模式和(在替换模式中的一些通配符之后)我需要检查它是否是Windows下的合法文件名.我试过使用正则表达式,[a-zA-Z0-9_]+但它不包括来自各种语言的许多国家特定字符(例如变音符号等).做这种检查的最佳方法是什么?
在Python中,如何检查字符串是否只包含某些字符?
我需要检查一个只包含a..z,0..9和的字符串.(期间),没有其他性格.
我可以迭代每个字符并检查字符是a ..z或0..9,或.但那会很慢.
我现在还不清楚如何使用正则表达式来完成它.
它是否正确?你能建议一个更简单的正则表达式或更有效的方法吗?
#Valid chars . a-z 0-9
def check(test_str):
import re
#http://docs.python.org/library/re.html
#re.search returns None if no position in the string matches the pattern
#pattern to search for any character other then . a-z 0-9
pattern = r'[^\.a-z0-9]'
if re.search(pattern, test_str):
#Character other then . a-z 0-9 was found
print 'Invalid : %r' % (test_str,)
else:
#No character other then . a-z 0-9 was found
print 'Valid : %r' % (test_str,)
check(test_str='abcde.1')
check(test_str='abcde.1#')
check(test_str='ABCDE.12')
check(test_str='_-/>"!@#12345abcde<')
''' …Run Code Online (Sandbox Code Playgroud) 我想从一些随机的Unicode字符串(mich可能只包含任何东西)创建一个健全/安全的文件名(即有些可读,没有"奇怪"字符等).
(对我来说无关紧要,函数是Cocoa,ObjC,Python等)
当然,可能会有无数的字符可能很奇怪.因此,拥有黑名单并在一段时间内向该列表添加越来越多的内容并不是真正的解决方案.
我可以有一个白名单.但是,我真的不知道如何定义它.[a-zA-Z0-9 .]是一个开始,但我也想接受可以正常方式显示的unicode字符.
我想使用用户提供的字符串作为导出的文件名,但必须确保该字符串在我的系统上允许作为文件名。从我的角度来看,可以用“_”等替换任何禁止的字符。
在这里我找到了文件名禁止字符的列表。
使用该功能应该很容易str.replace(),我只是想知道是否已经有东西可以做到这一点,甚至可能考虑到我所在的操作系统。
在子进程 (shell=False) 中使用外部源(例如:xml 文件)的文件名之前,通常的做法是什么?
更新:在发送一些解析后的字符串之前,我想进行一些基本的安全检查。给定的示例在远程模式下使用 mpg123(命令行音频播放器)来播放声音文件。
filename = child.find("filename").text # e.g.: filename = "sound.mp3"
pid = subprocess.Popen(["mpg123"],"-R"], stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
command = "L "+filename+"\n"
pid.stdin.write(command.encode())
Run Code Online (Sandbox Code Playgroud) 我将一组句子的录音保存到相应的一组音频文件中.
句子包括:
Ich weiß es nicht!
¡No lo sé!
Ég veit ekki!
Run Code Online (Sandbox Code Playgroud)
您如何建议我将句子转换为人类可读的文件名,稍后将在在线服务器上提供.我现在不确定将来可能会处理哪些语言.
更新:
请注意,两句话不能相互冲突.例如:
É bär icke dej.
E bår icke dej.
Run Code Online (Sandbox Code Playgroud)
无法解析为相同的文件名,因为这些将相互覆盖.这是这里提到的slugify函数的问题:将字符串转换为有效的文件名?
我想出的最好的是使用urllib.parse.quote.但是我认为最终的输出比我希望的更难阅读.有什么建议?:
Ich%20wei%C3%9F%20es%20nicht%21
%C2%A1No%20lo%20s%C3%A9%21
%C3%89g%20veit%20ekki%21
Run Code Online (Sandbox Code Playgroud) 是否有内置函数从字符串中删除所有不能在Windows文件名中的字符或以某种方式替换它们?
例如function("Some:unicode\symbols")- >"Some-unicode-symbols"
我在 python 2.7 中有一个程序,它根据用户输入编写某些文件和目录。我需要确保文件和目录对 linux 和 windows 都有效,因为文件将通过两个操作系统交换。这些文件最初将在 linux 中创建并手动移至 windows。
我检查了 Python 文档、堆栈交换和谷歌的几页,但没有找到任何可用的信息,这很奇怪,因为我认为这将是一个相当普遍的问题。
有简单的解决方案吗?
编辑:我想验证目录文件名,以防用户输入的路径不适用于 linux 或 windows。例如,如果用户输入“Folder1/This:Error/File.txt”,程序会将其视为错误。
该程序将在 Linux 中运行并在 linux 中写入文件,但稍后这些文件将被移动到 Windows。正斜杠/反斜杠的差异不是问题,但可能适用于 linux 但不适用于 windows 的其他字符会出现问题。
此外,通常文件或目录将不存在(因为它们将被创建)所以我需要检查保存在字符串中的路径是否是有效路径。
我想保存一个文件,其中最有效字符的名称保持不变,如果我提供了文件名,则为fe:
>This\ ?wesomé_Song?©.mp3
我想保存它Windows 7,它不会让我保存它,直到我删除>,\并且?.字符?,©并且é完全没问题,我想保持它们完好无损(而不是通过ASCII过滤器运行所有内容).
我不知道哪些字符允许使用fe Unix等,但我希望它能独立于平台工作.我解决这个问题的方法是实现一个字符串列表,每个字符串包含一个字符类,从最恶毒的(fe ?)到最无害的(字母a)排列并逐字逐句地敲出它们直到我得到一个文件名我可以保存.
语言是Python,谢谢!
python ×9
filenames ×5
windows ×5
string ×3
directory ×2
linux ×2
python-3.x ×2
regex ×2
c# ×1
character ×1
cocoa ×1
file ×1
filesystems ×1
pyobjc ×1
sanitization ×1
sanitize ×1
search ×1
subprocess ×1
validation ×1
zip ×1