3

我是python新手,所以请原谅我的问题。在我的工作中,我必须使用文本文件中表示的表格数据。这些值由逗号或分号分隔。此类文件的简化示例可能如下所示:

City;Car model;Color;Registration number
Moscow;Mercedes;Red;1234
Moscow;Mercedes;Red;2345
Kiev;Toyota;Blue;3423
London;Fiat;Red;4545

我的目标是有一个脚本可以告诉我莫斯科有多少辆梅赛德斯(在我们的例子中是两个),并保存一个新的文本文件 Moscow.txt 如下

Moscow;Mercedes;Red;1234
Moscow;Mercedes;Red;2345

我将非常感谢您的帮助。

4

1 回答 1

6

我建议查看pandas库。您可以对表格数据进行各种巧妙的操作。首先阅读它:

>>> import pandas as pd
>>> df = pd.read_csv("cars.ssv", sep=";")
>>> df
     City Car model Color  Registration number
0  Moscow  Mercedes   Red                 1234
1  Moscow  Mercedes   Red                 2345
2    Kiev    Toyota  Blue                 3423
3  London      Fiat   Red                 4545

以不同的方式对其进行索引:

>>> moscmerc = df[(df["City"] == "Moscow") & (df["Car model"] == "Mercedes")]
>>> moscmerc
     City Car model Color  Registration number
0  Moscow  Mercedes   Red                 1234
1  Moscow  Mercedes   Red                 2345
>>> len(moscmerc)
2

把它写出来:

>>> moscmerc.to_csv("moscmerc.ssv", sep=";", header=None, index=None)
>>> !cat moscmerc.ssv
Moscow;Mercedes;Red;1234
Moscow;Mercedes;Red;2345

您还可以同时处理多个组:

>>> df.groupby(["City", "Car model"]).size()
City    Car model
Kiev    Toyota       1
London  Fiat         1
Moscow  Mercedes     2
Dtype: int64

更新:@Anthon 指出上面只处理分号分隔符的情况。如果文件始终有逗号,那么您可以使用,而不是;,所以这很简单。更有趣的情况是,如果文件中的分隔符不一致,但这也很容易处理:

>>> !cat cars_with_both.txt
City;Car model,Color;Registration number
Moscow,Mercedes;Red;1234
Moscow;Mercedes;Red;2345
Kiev,Toyota;Blue,3423
London;Fiat,Red;4545
>>> df = pd.read_csv("cars_with_both.txt", sep="[;,]")
>>> df
     City Car model Color  Registration number
0  Moscow  Mercedes   Red                 1234
1  Moscow  Mercedes   Red                 2345
2    Kiev    Toyota  Blue                 3423
3  London      Fiat   Red                 4545

更新#2:现在文本是俄语的——当然是。:^) 不过,如果一切都正确编码,并且您的终端配置正确,那也应该可以工作:

>>> df = pd.read_csv("russian_cars.csv", sep="[;,]")
>>> df
     City Car model    Color  Registration number
0  Москва  Mercedes  красный                 1234
1  Москва  Mercedes  красный                 2345
2    Киев    Toyota    синий                 3423
3  Лондон      Fiat  красный                 4545
于 2013-03-26T14:38:37.957 回答