当前位置: 首页 > 面试题库 >

将结构写入CSV文件

井学
2023-03-14
问题内容

将结构转储到提供的csv文件中的惯用golang方法是什么?我在一个func里面,我的结构作为接口{}传递:

func decode_and_csv(my_response *http.Response, my_struct interface{})

为什么要使用界面{}?-从JSON读取数据,可能会返回一些不同的结构,因此尝试编写足够通用的函数。

我的类型的一个例子:

type Location []struct {
    Name                   string `json: "Name"`
    Region                 string `json: "Region"`
    Type                   string `json: "Type"`
}

问题答案:

如果您使用具体类型,将会容易得多。您可能想要使用该encoding/csv软件包,这是一个相关示例;https://golang.org/pkg/encoding/csv/#example_Writer

如您所见,该Write方法期望一个[]stringso以便生成此结果,您必须1)提供一个辅助方法或2)reflect
my_struct。就个人而言,我更喜欢第一种方法,但这取决于您的需求。如果要执行第二条路线,则可以获取结构上的所有字段,并将它们用作列标题,然后迭代获取每个字段的值的字段,append在该循环中使用以将它们添加到a
[]string,然后将其传递到Write外部循环。

对于第一个选项,我将ToSlice在每种类型上定义一个或某个内容,然后将其调用CsvAble需要该ToSlice方法的接口。更改输入你的方法,my_struct CsvAble而不是使用空接口,然后你可以叫ToSlicemy_struct,并通过返回值成Write。你可以有回报的列标题,以及(这意味着你会得到一个[][]string和需要遍历的外形尺寸经过各[]stringWrite),或者你可能需要另一种方法来满足喜欢的界面GetHeaders,它返回一个[]string是列标题。如果是这种情况,您的代码将类似于:

w := csv.NewWriter(os.Stdout)
headers := my_struct.GetHeaders()
values := my_struct.ToSlice()
if err := w.Write(headers); err != nil {
    //write failed do something
}
if err := w.Write(values); err != nil {
    //write failed do something
}

如果那没有意义,请告诉我,我可以为这两种方法中的任何一个提供代码示例。



 类似资料:
  • 问题内容: 我有一个pandas数据框,我想将其写入CSV文件。我正在使用以下方法: 并得到错误: 有什么方法可以轻松解决此问题(即我的数据框中有Unicode字符)吗?有没有一种方法可以使用例如“ to-tab”方法(我认为不存在)写入制表符分隔文件而不是CSV? 问题答案: 要用制表符分隔,可以使用参数: 要使用特定的编码(例如),请使用参数:

  • 问题内容: 我有一个带有字符串键和字符串值的哈希图。它包含大量键及其各自的值。 例如: 我想将此哈希图写入一个csv文件,以便我的csv文件包含以下行: 我在这里使用supercsv库尝试了以下示例:http ://javafascination.blogspot.com/2009/07/csv-write- using-java.html 。但是,在此示例中,您必须为要添加到csv文件的每一行创

  • 我在pandas中有一个数据帧,我想把它写到CSV文件中。我使用的是: 并得到错误: 有没有什么方法可以很容易地解决这个问题(例如,我的数据帧中有unicode字符)?还有,有没有一种方法可以使用“to-tab”方法(我认为不存在)写入以制表符分隔的文件,而不是CSV?

  • 我正在使用pyspark,在向S3写入数据时遇到了问题,但从S3读取数据并不是问题。 这是我的代码: 这是错误: 有什么问题?

  • 我使用supercsv CsvBeanWriter将值写入csv文件。 示例类: 我得到的结果是: 注意

  • 我正在使用Flume从我的本地文件系统写一些CSV文件到HDFS。 我想知道HDFS水槽的最佳配置是什么,这样本地系统上的每个文件都会在HDFS以CSV格式准确复制。我希望Flume处理的每个CSV文件都是单个事件,作为单个文件刷新和写入。尽可能多地,我希望文件是完全一样的,没有标题的东西等。 我需要在这些值上加什么来模拟我想要的行为? 如果还有其他Flume代理配置变量需要更改,请提供。 如果这