【问题标题】:Java IO Exception when using Weka CSVLoader in Java code在 Java 代码中使用 Weka CSVLoader 时出现 Java IO 异常
【发布时间】:2012-04-30 18:43:09
【问题描述】:

我正在尝试使用 Java 代码自动化一些 Weka 分类。尝试读取 csv 文件时出现以下错误:

java.io.IOException:值的数量错误。阅读98,预期97, 阅读 Token[EOL],第 3 行 weka.core.converters.ConverterUtils.errms(ConverterUtils.java:912) 在 weka.core.converters.CSVLoader.getInstance(CSVLoader.java:747) 在 weka.core.converters.CSVLoader.getDataSet(CSVLoader.java:570) 在 Classifier_Search.readFile(Classifier_Search.java:18) 在 Classifier_Search.main(Classifier_Search.java:178) 在 sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 在 sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(未知来源)在 java.lang.reflect.Method.invoke(未知来源)在 edu.rice.cs.drjava.model.compiler.JavacCompiler.runCommand(JavacCompiler.java:271)

当我尝试通过 Weka GUI 输入 csv 文件时,我遇到了同样的错误。据我所知,该 csv 文件与我在 Weka 中成功使用的其他 csv 文件没有什么不同。关于可能导致此错误的任何想法?

为此,我无法在 OldNabble 上找到令人满意的答案 - 我尝试了我设法找到的一个建议,但没有奏效。一个建议是将条目封装在双引号中 - 这并没有改变任何内容。

为了清楚起见(因为我不知道如何上传东西),csv 文件如下所示:

C1V1、C2V1、C3V1、...类,

4000.5, 3890.6, 2900.7, ... N,

...

...

每行有 97 个条目。在另一个版本中,我在字符串和字符(在第一行和最后一列)周围加上了双引号,正如我之前所说,这没有帮助。

谢谢!

【问题讨论】:

  • csv 中的第 3 行导致问题。行中有多余的逗号吗?
  • 不,没有。我检查了文件,所有行看起来都一样。不过谢谢!
  • 去掉第3行还能用吗?
  • 在我看来,CSV 文件中的标头只有 97 个类。当它遇到第一行值时,它会找到其中的 98 个,并抛出异常。重新检查 CSV 标头中的类数。
  • 我这样做了,但仍然出现错误,删除单引号 (') 为我解决了这个问题。

标签: java csv io weka


【解决方案1】:

我在使用 weka 工具时也遇到了同样的问题。我能够像这样解决它。

当你得到这种类型的异常。找到提示行上方的行。例如:在我的情况下,我被提示异常是由于 80542 行中的一些故障,所以我需要检查 80541 行。然后您可以看到该行中有一个额外的逗号或额外的双引号。删除多余的逗号或双引号并保存文件。再次运行它。然后它可以正常工作,没有任何异常。

【讨论】:

    【解决方案2】:

    我发现了不同之处:如果 .csv 文件的行尾有逗号,则会导致 csvloader 抛出此错误。因此,如果您尝试使用它,请消除 .csv 文件中行尾的逗号。我不知道为什么只有第 3 行而不是第 1 行和第 2 行抛出错误(所有行都相同),但这修复了它。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-11
      • 2013-12-16
      • 1970-01-01
      • 1970-01-01
      • 2022-01-03
      • 2017-03-03
      相关资源
      最近更新 更多