python - 为什么在写入 csv 文件以及添加到列表时,数字字符串和字符串文本(波斯语)的顺序会发生变化?

标签 python list csv unicode right-to-left

import csv
with open('cars_data.csv', mode='w') as csv_file:
    writer = csv.writer(csv_file, delimiter=',', quoting=csv.QUOTE_MINIMAL)
    name = ['پژو 206', 'ام وی ام x55', 'رنو ساندرو']
    model = ['1382', '1399', '1394']
    function = ['250000', '0', '0']
    color = ['مشکی', 'خاکستری', 'سفید']
    city = ['تهران', 'تهران', 'میدان آرژانتین']
    price = ['585000000', '178000000', '332000000']
    for name, model, function, color, city, price in zip(name, model, function, color, city, price):
        writer.writerow([name, model, function, color, city, price])

输出:

پژو 206,1382,250000,مشکی,تهران,585000000
ام وی ام x55,1399,0,خاکستری,تهران,178000000
رنو ساندرو,1394,0,سفید,میدان آرژانتین,332000000

但我期望的输出示例是:

تهران ,مشکی ,250000 ,1382 ,پژو 206, price(585000000)

根据我给出的例子,需要注意的是,这不仅仅是反数据的问题。

这种混淆是由于波斯语与英语数字不兼容造成的吗?

解决此问题的一种方法是通过 num2words 库将数字转换为单词。稍后使用 words2num 库分析数据,我们可以将数字转换为文本到数字,这似乎是一项额外而繁琐的工作。如果您有更快的解决方案,我会很乐意帮助我:)

预先感谢您的指导。

最佳答案

这是混合从左到右和从右到左语言的结果,它混淆了 IDE/浏览器显示。考虑以下内容,它提供了一个 Unicode 代码点来覆盖由打印波斯语引起的从右到左的默认值:

import csv

ltr = '\N{LEFT-TO-RIGHT OVERRIDE}'

with open('cars_data.csv', 'w', encoding='utf8', newline='') as csv_file:
    writer = csv.writer(csv_file)
    name = 'پژو 206'
    model = '1382'
    func = '250000'
    color = 'مشکی'
    city = 'تهران'
    price = '585000000'
    writer.writerow([name, model, func, color, city, price])

with open('cars_data.csv','r',encoding='utf8',newline='') as csv_file:
    reader = csv.reader(csv_file)
    for row in reader:
        print(row)      # Row is printed backward
        print(ltr,row)  # With left-to-right override
        for col in row: # Columns print in the correct order
            print(col)

输出:

['پژو 206', '1382', '250000', 'مشکی', 'تهران', '585000000']
‭ ['پژو 206', '1382', '250000', 'مشکی', 'تهران', '585000000']
پژو 206
1382
250000
مشکی
تهران
585000000

请注意,不同的浏览器和 IDE 可能会显示不同的内容,具体取决于它们对从左到右的语言的支持程度。例如,我的 IDE 向后打印 LTR 覆盖行的第一个括号,但我在查看此 StackOverflow 页面的 Chrome 浏览器中看不到这一点。

关于python - 为什么在写入 csv 文件以及添加到列表时,数字字符串和字符串文本(波斯语)的顺序会发生变化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66459847/

相关文章:

python - 查找数据框中每组另一个常见单元格中最常见的单元格

python - 如何将列表作为值合并到字典中?

在 R 中读取格式错误的 csv - 不匹配的引号

python csv按行而不是按列列出

Java:根据用户定义的XSD编写XML

python - Cython 的功率谱

java - 如何从 Java 执行 Python 脚本(通过命令行)?

python - 对包含重复项的列进行分组,但同时保留重复信息

java - 从 Java 中的 ArrayList 获取唯一值

android - 更新现有列表项的数量而不是添加新项