Python:根据条件重新排列csv行

Python:根据条件重新排列csv行,python,csv,xlwt,Python,Csv,Xlwt,如果我有以下几个csv文件: a,1,2,3 type, max, min, avg b,4,5,6 <empty line> c,6,7,8 xxx,4,3,2 d,5,6,7 编辑: 伙计们,为最初的csv数据的误导道歉。我的csv数据文件不包含任何空行。它是包含空行的最终产品,即最终xls文件。空行正好出现在假定的行[0]-“type”处。 此外,我还集成了一个代码,可以防止第1行被覆盖 e、 g。 输入: 输出xls: type, max, min, avg <emp

如果我有以下几个csv文件:

a,1,2,3
type, max, min, avg
b,4,5,6
<empty line>
c,6,7,8
xxx,4,3,2
d,5,6,7
编辑: 伙计们,为最初的csv数据的误导道歉。我的csv数据文件不包含任何空行。它是包含空行的最终产品,即最终xls文件。空行正好出现在假定的
行[0]-“type”
处。 此外,我还集成了一个代码,可以防止第1行被覆盖

e、 g。 输入:

输出xls:

type, max, min, avg
<empty line>
a,1,2,3
b,4,5,6
c,6,7,8
d,5,6,7
类型,最大值,最小值,平均值
a、 1,2,3
b、 4,5,6
c、 6,7,8
d、 5,6,7

这里,头被写入第1行,忽略“xxx”行,但空行出现在第2行,这是输入文件中第[0]=“type”行的位置。这就是为什么我引入了“pass\u count”来跳过这一行,但似乎没有在某个地方达到目的的原因。

如果一行是空的,我不认为这是真的:

row[0] == ' '  # A space?
我希望
是一个空列表,但也许您的数据中有一些我不知道的东西


此外,与其整理逻辑以跟踪
行计数
,然后减去
通过计数
,为什么不保持简单,只要在编写另一个Excel行时增加
行计数
?这将使通过计数变得不必要。

如果一行是空的,我不认为这是真的:

row[0] == ' '  # A space?
我希望
是一个空列表,但也许您的数据中有一些我不知道的东西

此外,与其整理逻辑以跟踪
行计数
,然后减去
通过计数
,为什么不保持简单,只要在编写另一个Excel行时增加
行计数
?这将使通过计数变得不必要。

您的“空”行不是空的。

如果是空的,
将是
[]
,即空列表,对
行[0]
的第一个引用将引发异常。由于这并没有发生,正如您所说,它无法匹配一个空格,因此得出的结论是它必须包含其他一些空格

对于真正空行的健壮性,应首先测试空行:

if not row: continue
row = [x.strip() for x in row] # remove leading and trailing whitespace from all fields
if not row[0] or row[0] == "xxx": continue
if row[0] == "type":
    # code to write headings goes here
else:
    # code to write data goes here
row_count += 1 # pass_count is pointless
顺便说一下,您的示例数据在第二个输入行中有“type”。这将覆盖输出文件中的第一行,而第二个输出文件行将为空

根据修改后的信息更新

即使当前文件中没有空行,使用类似于我建议的代码来防止完全空行、仅包含空格的行和仅包含空格的字段也是非常好的做法。csv文件末尾的空行或空行并不少见

我应该提到的是,您似乎有一个古老版本的
xlwt
;更高版本将引发异常,例如,
尝试覆盖单元格:sheetname=u'x'rowx=0 colx=0
。这是为了防止无意覆盖,并且可以在每张工作表的基础上关闭:
工作簿。添加工作表(某些工作表名称,单元格\u overwrite\u ok=True)

ws=wb.add_sheet(str(f_short_name))
中使用
str()
,显然是不必要的,如果文件名已经是
unicode
对象,则可能会导致异常。

您的“空”行不是空的。

如果是空的,
将是
[]
,即空列表,对
行[0]
的第一个引用将引发异常。由于这并没有发生,正如您所说,它无法匹配一个空格,因此得出的结论是它必须包含其他一些空格

对于真正空行的健壮性,应首先测试空行:

if not row: continue
row = [x.strip() for x in row] # remove leading and trailing whitespace from all fields
if not row[0] or row[0] == "xxx": continue
if row[0] == "type":
    # code to write headings goes here
else:
    # code to write data goes here
row_count += 1 # pass_count is pointless
顺便说一下,您的示例数据在第二个输入行中有“type”。这将覆盖输出文件中的第一行,而第二个输出文件行将为空

根据修改后的信息更新

即使当前文件中没有空行,使用类似于我建议的代码来防止完全空行、仅包含空格的行和仅包含空格的字段也是非常好的做法。csv文件末尾的空行或空行并不少见

我应该提到的是,您似乎有一个古老版本的
xlwt
;更高版本将引发异常,例如,
尝试覆盖单元格:sheetname=u'x'rowx=0 colx=0
。这是为了防止无意覆盖,并且可以在每张工作表的基础上关闭:
工作簿。添加工作表(某些工作表名称,单元格\u overwrite\u ok=True)


ws=wb.add_sheet(str(f_short_name))
中使用
str()

如果文件名已经是
unicode
对象,则可能会导致异常。

实际上,我已经排除了代码,以防止覆盖第1行,也就是说,我已经设置了
行\u count=1
。我已经按照您之前的建议,使用上面的代码示例反检查空列表。此外,它看起来更像蟒蛇。注意到一些非常有用和关键的学习!非常感谢!实际上,我已经排除了代码以防止覆盖第1行,也就是说,我已经设置了
row\u count=1
。我已经按照前面的建议,使用上面的代码示例来反检查空列表。此外,它看起来更像蟒蛇。注意到一些非常有用和关键的学习!非常感谢!通过减少行[0]='type'嵌套中的
行计数
计数器,找到了解决方案:谢谢大家!通过减少行[0]='type'嵌套中的
行计数
计数器,找到了解决方案:谢谢大家!