- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
好吧,正如标题所示,我遇到的问题是从 python 中的 windows-1252 编码文件中正确读取输入并将所述输入插入到 SQLAlchemy-MySql 表中。
当前系统设置:
带有输出文件的“Roger Access Control System”的 Windows 7 VM;
Ubuntu 12.04 LTS VM 与 Windows 系统的共享文件夹,因此我可以使用“Python 2.7.3”访问该文件。
现在到实际问题,对于输入文件,我有一个“VM 共享文件夹”,其中包含一个通过 Roger 访问控制系统在 Windows 7 系统上生成的文件(更多详细信息,roger.pl),这个文件被称为“PREvents.csv”,这表明它的内容是“;”单独的数据列表。
数据格式示例:
2013-03-19;15:58:30;100;Jānis;Dumburs;1;Uznemums1;0;Ieeja;
2013-03-19;15:58:40;100;Jānis;Dumburs;1;Uznemums1;2;Izeja;
第 4 个字段包含卡所有者姓名,第 5 个字段包含所有者姓氏,第 6 个字段包含所有者分配的组。
问题在于上述三个字段中的任何一个都可以包含特定于拉脱维亚语言的字符,在示例文件中,单词“Jānis”包含字母“ā”,在 unicode 中是 257。
按照我的习惯,我这样打开文件:
try:
f = codecs.open(file, 'rb', 'cp1252')
except IOError:
f = codecs.open(file, 'wb', 'cp1252')
到目前为止,一切正常 - 它打开了文件,所以我继续迭代文件的每一行(这是一个连续运行的脚本,所以请原谅循环):
while True:
line = f.readline()
if not line:
# Pause loop for 1 second
time.sleep(1)
else:
# Split the line into list
date, timed, userid, firstname, lastname, groupid, groupname, typed, pointname, empty = line.split(';')
这就是问题开始的地方,如果我 print repr(firstname)
它打印 u'J\xe2nis'
据我所知,不是正确 - `\xe2\不代表拉脱维亚字符“ā”。
根据事件类型进一步向下循环,我将变量分配给 SQLAlchemy 对象并插入/更新:
if typed == '0': # Entry type
event = Events(
period,
fullname,
userid,
groupname,
timestamp,
0,
0
)
session.add(event)
else: # Exit type
event = session.query(Events).filter(
Events.period == period,
Events.exit == 0,
Events.userid == userid
).first()
if event is not None:
event.exit = timestamp
event.spent = timestamp - event.entry
# Commit changes to database
session.commit()
在我寻找答案的过程中,我发现了如何定义要使用的默认编码:
import sys
reload(sys)
sys.setdefaultencoding('utf-8')
这对我没有任何帮助。
基本上,这一切都会导致我无法插入正确的所有者名字/姓氏以及所有者分配的组名,如果它们包含任何拉脱维亚特定字符,例如:
Instead of the character "ā" it inserts "â"
我还想补充一点,我无法更改“PREvents.csv”文件编码,并且“RACS”系统不支持插入 UTF-8 或 Unicode 文件 - 如果您尝试任何一种方式,系统都会随机插入拉脱维亚特定字符的符号。
如果需要任何其他信息,请现在告诉我,我很乐意提供:)
任何帮助将不胜感激。
最佳答案
CP1252 不能代表ā;您的输入包含相似的字符 â。 repr
仅在 Python 2.x 中显示 unicode 字符串的 ASCII 表示:
>>> print(repr(b'J\xe2nis'.decode('cp1252')))
u'J\xe2nis'
>>> print(b'J\xe2nis'.decode('cp1252'))
Jânis
关于python - 在 python 中正确读取 Windows-1252(cp1252) 文件中的文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15502619/
我想知道是否有一个相同的命令可以像使用旧的 MS-DOS 一样将文件夹复制到当前目录。假设我当前的目录位置是: /var/www/ 我有文件夹和文件: /home/hope/subfolder/doc
已关闭。此问题不符合Stack Overflow guidelines 。目前不接受答案。 这个问题似乎不是关于 a specific programming problem, a software
我有一个项目,其中一个目录最初(数百次提交前)是从另一个目录逐字复制的,但是没有使用 svn cp 所以历史上有一个断开连接。现在是否可以在初始复制点连接两个目录,还是为时已晚? 最佳答案 让我猜猜你
我一直在寻找一种方法来 cp 文件并同时将其权限修改为 400...在 public_html 文件夹中进行了一些测试之后... public_html >> ls -lah -rw-r--r--
如果lib/目录下只包含.jar文件,有什么区别 java -cp "lib/*" ... 和 java -cp "lib/*.jar" ... 如果我使用后者,我会遇到关于主类的错误,我不明白为什么
我注意到 javac 和 java 选项的大小写敏感性似乎有所不同。例如: 区分大小写的 javac 命令选项? -cp Yes -sourcepath Yes -d
我以前从来没有遇到过这个问题,当我去运行 Java 程序(在终端中)时,我会简单地说, java className 然后程序就会运行。但是最近当我尝试这个时我得到了错误, could not
我有两个问题: 为什么 javac -cp 不需要 .? $ javac -cp /home/t/programs/java/test/junit-4.11.jar TestCase.java 为什么
根据 Linux 中的管道方法,第一个命令的输出应该被视为第二个命令的输入。所以当我在做 which cp | ls -l,应该当作ls -l $(which cp) 但输出显示的是其他内容。 为什么
有什么区别 cp -R source_path target_path 对比 cp -R source_path/* target_path 我发现第二个 cmd 在我的 amazon linux 系
根据标准: A copy/move constructor for class X is trivial if it is not user-provided and if — class X has
当我对 grep 执行 ls 时,结果正是我所需要的:dll 列表,见下文: $ ls -R | grep "dll$" boost_chrono-vc90-gd-1_47.dll boost_c
出于工作需要,使用aws Java SDK实现“aws s3 cp”命令会很方便。 有现成的类,例如TransferManager,AmazonS3Client有get方法。他们可以轻松地将文件下载到
背景 我有两个图像文件夹...文件夹一是包含数千张彩色图像的主文件夹。文件夹二是一个经过过滤的文件夹,其中包含我一直在整个文件夹一中寻找的内容,但文件夹二中的图像是黑白的。 特别说明 – 文件夹二中的
大家好,我正在使用 GCE,现在我是存储桶的新手。我的另一个桶上有很多照片。我尝试将其复制为 sudo gsutil cp -R dir dir 我花了 30 分钟仍未完成文件复制,所以我尝试了使用
我正在尝试从命令行编译并运行程序。当我们编译它时,我们执行 -cp 并将其链接到我们的 jdbc jar。 javac -cp jdbc.jar *.java 如果我们这样做: java调试器 然后我
我正在编写一个脚本来设置 debian 安装,这个错误让我很沮丧: 问题: cp "$BASHRC" "$HOME"/.bashrc 给出: + sudo -u billy bash cp: cann
#!/bin/bash # Make a txt copy of any html files for value in $1/*.html do if [[ $value == *.
我有一个大文件正在移动。实验室中的正常协议(protocol)是将其复制到某处,然后将其删除。 我决定改成mv。 我的问题是,为什么 mv 比 cp 快这么多? 为了测试它,我生成了一个 2.7 GB
我有一个大文件正在移动。实验室中的正常协议(protocol)是将其复制到某处,然后将其删除。 我决定改成mv。 我的问题是,为什么 mv 比 cp 快这么多? 为了测试它,我生成了一个 2.7 GB
我是一名优秀的程序员,十分优秀!