Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/333.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我们如何使用python sdk读取Apache Beam中带有附件的CSV文件?_Python_Apache Beam_Apache Beam Io - Fatal编程技术网

我们如何使用python sdk读取Apache Beam中带有附件的CSV文件?

我们如何使用python sdk读取Apache Beam中带有附件的CSV文件?,python,apache-beam,apache-beam-io,Python,Apache Beam,Apache Beam Io,我正在阅读一个逗号分隔的CSV文件,其中字段用双引号括起来,其中一些字段的值中也有逗号,如:“abc”、“def、ghi”、“jkl” 是否有一种方法可以使用Apache Beam将此文件读入PCollection?示例csv文件,其中数据用双引号括起来 "AAA", "BBB", "Test, Test", "CCC" "111", "222, 333", "XXX", "YYY, ZZZ" 您可以使用标准库中的: def print_row(element): print eleme

我正在阅读一个逗号分隔的CSV文件,其中字段用双引号括起来,其中一些字段的值中也有逗号,如:
“abc”、“def、ghi”、“jkl”


是否有一种方法可以使用Apache Beam将此文件读入PCollection?

示例csv文件,其中数据用双引号括起来

"AAA", "BBB", "Test, Test", "CCC" 
"111", "222, 333", "XXX", "YYY, ZZZ"
您可以使用标准库中的:

def print_row(element):
  print element

def parse_file(element):
  for line in csv.reader([element], quotechar='"', delimiter=',', quoting=csv.QUOTE_ALL, skipinitialspace=True):
    return line

parsed_csv = (
                p 
                | 'Read input file' >> beam.io.ReadFromText(input_filename)
                | 'Parse file' >> beam.Map(parse_file)
                | 'Print output' >> beam.Map(print_row)
             )
这将提供以下输出

['AAA', 'BBB', 'Test, Test', 'CCC']
['111', '222, 333', 'XXX', 'YYY, ZZZ ']

需要注意的一点是,
csv.reader
对象需要一个
iterator
,它将返回字符串的
iterator
。这意味着不能将字符串直接传递给
读取器()
,但可以将其包含在
列表中,如上所述。然后,您将迭代输出以获得最终字符串。

问题似乎根本不包括解决问题的任何尝试。请编辑问题以显示您尝试过的内容,并显示您遇到的特定障碍。有关更多信息,请参阅。谢谢Faizan,这是我一直在寻找的。真棒的答案。我喜欢类似于
mycsvreader=csv.reader(…)
然后是
return next(mycsvreader)
这样的东西,以便在代码中澄清只返回一行,因为行在Beam中的移动可能会让初学者感到困惑。基本上,mycsvreader将是一个迭代器,您将得到下一个迭代器,因为这就是全部内容。