在合并1-7行时,是否可以将它们显示在csv文件中的一行上,我可以得到一些帮助吗?我试图将其放入数据框,但格式将第一列中的数据弄乱了。
1527047244357,'line_A','{}','{
<gpx abcd>
<rte>
<name>defg</name>
</rte>
</gpx>
}'
1527047244358,'line_B'
我正在使用的每个csv文件中都有数千行,这些行在文件中随机出现。我在想,也许for循环会起作用,以检查第一个字符是否为数字,如果不是,请删除换行符,以便获得所需的内容:
1527047244357,'line_A','{}','{<gpx abcd><rte><name>defg</name></rte></gpx>}'
1527047244358,'line_B'
我该如何完成?到目前为止,这是我的伪代码:
for row in readerObj:
if isinstance(row[0], int) == True:
(delete line break)
csvWriter.writerow(row)
答案 0 :(得分:1)
大多数csv数据使用"
作为引号字符。您可以使用'
来代替,它可以由csv.reader
和pd.read_csv
支持的quotechar
参数进行控制:
In [61]: pd.read_csv("data.csv", quotechar="'", header=None)
Out[61]:
0 1 2 3
0 1527047244357 line_A {} {\r\n<gpx abcd>\r\n <rte>\r\n <name>...
1 1527047244358 line_B NaN NaN
有了这个,就可以适当地剥离。
答案 1 :(得分:0)
这是一种方法。
演示:
s = """1527047244357,'line_A','{}','{
<gpx abcd>
<rte>
<name>defg</name>
</rte>
</gpx>
}'
1527047244358,'line_B'"""
res = [[]]
checkVal = False
for line in s.splitlines(): #Iterate Each line
if line.strip().endswith("{"): #Check if line ends with {
checkVal = True
if line.strip().endswith("}'"): #Check if line ends with }
checkVal = False
res[-1].append(line)
continue
if checkVal:
res[-1].append(line)
else:
res.append([line])
for i in res:
print(" ".join(i))
输出:
1527047244357,'line_A','{}','{ <gpx abcd> <rte> <name>defg</name> </rte> </gpx> }'
1527047244358,'line_B'
答案 2 :(得分:0)
一次读取一行原始文件,并将这些行写入输出文件而不会出现换行符,除非一行以数字开头(在这种情况下,它是下一行和一行)必须在其前面插入中断):
import re
with open("original.csv") as infile:
with open("fixed.csv", "w") as outfile:
for lineno,line in enumerate(infile):
# The beginning of the next row
if re.match('\d+,', line) and lineno > 0:
outfile.write('\n')
outfile.write(line.rstrip())
变量lineno
防止代码在文件的开头插入换行符。使用此方法,您可以处理任意长文件,因为您始终最多只能处理一行。
答案 3 :(得分:0)
我试图使其与您的代码相似并且易于理解。
readerObj = """1527047244357,'line_A','{}','{
<gpx abcd>
<rte>
<name>defg</name>
</rte>
</gpx>
}'
1527047244358,'line_B'"""
temp_csv = ''
for line in readerObj.splitlines():
line_splitted = line.split(',')
dumped_whitespaces = [el.strip(' ') for el in line_splitted]
first_obj = line_splitted[0]
# that's the recommended way to check if something is a digit
if first_obj.isdigit():
# adds new line
temp_csv += "\n"
temp_csv += ','.join(dumped_whitespaces)
with open('yourfile.csv', 'w') as f:
f.write(temp_csv)
结果
1527047244357,'line_A','{}','{<gpx abcd><rte><name>defg</name></rte></gpx>}'
1527047244358,'line_B'
如果您需要确保一切正常,请使用熊猫。