从 CSV 文件的字符串列中删除新行



我有一个带有多个字段的CSV文件。数据(字符串(很少,数据将跨越多行。我想将这些多行汇总到一行中。

输入数据:

1, "asdsdsdsds", "John"
2, "dfdhifdkinf
dfjdfgkdnjgknkdjgndkng
dkfdkjfnjdnf", "Roy"
3, "dfjfdkgjfgn", "Rahul"

预期输出:

1, "asdsdsdsds", "John"
2, "dfdhifdkinf dfjdfgkdnjgknkdjgndkng dkfdkjfnjdnf", "Roy"
3, "dfjfdkgjfgn", "Rahul"

早些时候提出了同样的问题。但是,使用电源壳可以实现解决方案。是否可以使用Python或Pandas或Pyspark实现相同的方法。

每当数据跨越多行时,它肯定会在双引号中。

我尝试了

我能够使用熊猫和pyspark读取数据,即使有一些字段被跨越多行。

pandas:

pandas_df = pd.read_csv("file.csv")

pyspark

df = sqlContext.read.format('com.databricks.spark.csv').options(header='true', inferschema='true') 
        .option("delimiter", ",").option("escape", '\').option("escape", ':').
    option("parserLib", "univocity").option("multiLine", "true").load("file.csv")

编辑:

CSV文件中可以有n个字段,并且此数据跨度可以在任何字段中。

def weird_gen(s):
    s = [s]
    while s:
        *x, a = s[0].split(',', 2)
        y, *s = a.split('n', 1)
        yield ', '.join(z.strip().replace('n', ' ') for z in x + [y])
print('n'.join(weird_gen(open('bad.csv').read())))
1, "asdsdsdsds", "John"
2, "dfdhifdkinf dfjdfgkdnjgknkdjgndkng dkfdkjfnjdnf", "Roy"
3, "dfjfdkgjfgn", "Rahul"

这可能会有所帮助。我正在使用简单的循环和负索引来获得所需的结果。

s = """1, "asdsdsdsds", "John"
2, "dfdhifdkinf
dfjdfgkdnjgknkdjgndkng
dkfdkjfnjdnf", "Roy"
3, "dfjfdkgjfgn", "Rahul"""
res = []
for i in s.split("n"):
    if i[0].isdigit():
        res.append(i)
    else:
        res[-1] = res[-1] + " " + I
for i in res:
    print(i)

输出

1, "asdsdsdsds", "John"
2, "dfdhifdkinf dfjdfgkdnjgknkdjgndkng dkfdkjfnjdnf", "Roy"
3, "dfjfdkgjfgn", "Rahul

最新更新