如何使用Python检测用户机器中的列表分隔符?
需要在用户计算机上创建CSV文件,并且必须自动检测列表分隔符(以便excel可以读取CSV文件).
我发现Excel从"区域选项 - >数字 - >列表分隔符"中获取CSV元素分隔符.Python中的locale模块用于检测文化设置,但它(locale.localeconv)不包含列表分隔符.用dialect ='excel'打开CSV编写器没有帮助.知道如何获得正确的分隔符吗?
编辑
以下代码似乎有效(但不能接受任何upvotes,因为解决方案不是我的)
import locale
langlocale = locale.getdefaultlocale()[0]
locale.setlocale(locale.LC_ALL, langlocale)
dp = locale.localeconv()['decimal_point']
delimiter = ','
if dp == ',':
delimiter = ';'
Run Code Online (Sandbox Code Playgroud)
小智 5
提供了从 Windows 注册表中读取列表分隔符的想法。
提供了访问 Windows 注册表值的代码。
使用_winreg 包,可以从注册表中检索 Windows 列表分隔符值,如下所示:
from _winreg import *
def getListSeparator():
'''Retrieves the Windows list separator character from the registry'''
aReg = ConnectRegistry(None, HKEY_CURRENT_USER)
aKey = OpenKey(aReg, r"Control Panel\International")
val = QueryValueEx(aKey, "sList")[0]
return val
print getListSeparator()
Run Code Online (Sandbox Code Playgroud)
或者对于最近的 Python 版本:
import winreg
def getListSeparator():
'''Retrieves the Windows list separator character from the registry'''
aReg = winreg.ConnectRegistry(None, winreg.HKEY_CURRENT_USER)
aKey = winreg.OpenKey(aReg, r"Control Panel\International")
return winreg.QueryValueEx(aKey, "sList")[0]
print(getListSeparator())
Run Code Online (Sandbox Code Playgroud)
使用xlwt写入 XLS 文件。
采取 2:使用 locale 模块和一些启发式方法:
>>> import locale
>>> locale.setlocale(locale.LC_ALL, '') # set to user's locale, not "C"
'English_Australia.1252'
>>> dec_pt_chr = locale.localeconv()['decimal_point']
>>> if dec_pt_chr == ",":
... list_delimiter = ";"
... else:
... list_delimiter = ","
...
>>> print repr(dec_pt_chr), repr(list_delimiter)
'.' ','
>>> locale.setlocale(locale.LC_ALL, 'French_France.1252')
'French_France.1252'
>>> dec_pt_chr = locale.localeconv()['decimal_point']
>>> if dec_pt_chr == ",":
... list_delimiter = ";"
... else:
... list_delimiter = ","
...
>>> print repr(dec_pt_chr), repr(list_delimiter)
',' ';'
>>>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3781 次 |
| 最近记录: |