如何使用C#解析从Google Insights下载的CSV

本文关键字:Insights 下载 CSV Google 何使用 | 更新日期: 2023-09-27 17:59:37

我正在从Google Insights下载CSV,我需要解析出某些信息,并使用这些数据来填充热图。

谷歌没有一个开放的API洞察,所以你只能下载CSV然后解析出来。

有很多数据被下载,但我需要的数据从第61行开始,持续大约40行,数据看起来像这样:

...
...  above data
....
Top subregions for test 
Subregion   test
New York    100
Ohio    79
Kentucky    72
Maine   66
New Jersey  64
District of Columbia    58
Pennsylvania    58
Delaware    58
Maryland    57
Massachusetts   52

我能够加载CSV——我只是不知道如何正确地解析出特定的数据。我循环浏览CSV,直到找到"子区域"文本——但在那之后,我不知道如何调出状态并计入某种词典。

如有任何帮助,我们将不胜感激。

谢谢!

如何使用C#解析从Google Insights下载的CSV

class Program
{
    static void Main()
    {
        foreach (var item in GetRegions("google_insights.txt"))
        {
            Console.WriteLine("Count = {0}, Name = {1}", item.Value, item.Key);
        }
    }
    private static Regex _regionRegex = new Regex(
        @"^(?<name>.+)'s(?<count>[0-9]+)$", 
        RegexOptions.Compiled
    );
    static IEnumerable<KeyValuePair<string, int>> GetRegions(string filename)
    {
        using (var file = File.OpenRead(filename))
        using (var reader = new StreamReader(file))
        {
            string line;
            bool yielding = false;
            while ((line = reader.ReadLine()) != null)
            {
                if (yielding && string.IsNullOrWhiteSpace(line)) //IsNullOrEmpty works as well
                {
                    yield break;
                }
                if (yielding)
                {
                    var match = _regionRegex.Match(line);
                    if (match.Success)
                    {
                        var count = int.Parse(match.Groups["count"].Value);
                        var name = match.Groups["name"].Value;
                        yield return new KeyValuePair<string, int>(name, count);
                    }
                }
                if (line.Contains("subregions"))
                {
                    yielding = true;
                }
            }
        }
    }
}

我强烈建议您研究一下TextFieldParser。另请参阅右侧的"相关"问题。

您在上面粘贴的内容看起来不像CSV格式,如中所示,逗号在哪里?对于CSV解析,在stackoverflow上搜索CSV正则表达式,有一些非常好的建议。但是,如果你的数据看起来像是粘贴在上面的(用空格和/或制表符分隔,而不是逗号),如果你只想迭代你的数据并填充一个字典,你可以做这样的事情:


Dictionary<string, int> data = new Dictionary<string,int>();
string line = null;
while ((line = ReadLine()) != null) /*ReadLine() is what you currently use to read next line from your input*/
{
 string[] items = line.Split(new char[]{' ', ''t'}, StringSplitOptions.RemoveEmptyEntries);
 string state= items[0].
 int count = int.Parse(items[1]);
 data.Add(state, count);
}