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/