循环csv文件时,Python for循环仅执行一次

循环csv文件时,Python for循环仅执行一次,python,loops,Python,Loops,我是python新手,在使用小脚本时遇到了问题 定义的for循环当前仅运行一次 下面是代码(每行有8个元素): 它正确地打印文件的每一行 为什么调用我的函数字符串\u到\u xml会导致循环只运行一次 编辑:这里是我的csv文件的前两行,如果这有帮助的话: BIRITE,130405,Steak Sauce,Kraft,24,5oz,43.96,1.83 BIRITE,441045,Anchovy Filet,Maria,12,13oz,51.83,4.32 注意:在Linux机器上完成 由于

我是python新手,在使用小脚本时遇到了问题

定义的for循环当前仅运行一次

下面是代码(每行有8个元素):

它正确地打印文件的每一行

为什么调用我的函数字符串\u到\u xml会导致循环只运行一次

编辑:这里是我的csv文件的前两行,如果这有帮助的话:

BIRITE,130405,Steak Sauce,Kraft,24,5oz,43.96,1.83
BIRITE,441045,Anchovy Filet,Maria,12,13oz,51.83,4.32

注意:在Linux机器上完成

由于此代码似乎是为其他人运行的,因此让我们创建一个CSV,然后在其上再次运行相同的代码,这将澄清是否存在编码问题

a=open('test.csv','wb')
a.write("BIRITE,130405,Steak Sauce,Kraft,24,5oz,43.96,1.83\n"+
    "BIRITE,441045,Anchovy Filet,Maria,12,13oz,51.83,4.32\n")
a.close()

def string_to_xml(string):
    entries = string.split(',')
    result = "<item>\n"
    result += "\t<distributor>" + entries[0] + "</distributor>\n"
    result += "\t<number>" + entries[1] + "</number>\n"
    result += "\t<description>" + entries[2] + "</description>\n"
    result += "\t<brand>" + entries[3] + "</brand>\n"
    result += "\t<casesize>" + entries[4] + "</casesize>\n"
    result += "\t<unitsize>" + entries[5] + "</unitsize>\n"
    result += "\t<caseprice>" + entries[6] + "</caseprice>\n"
    result += "\t<unitprice>" + entries[7] + "</unitprice>\n"
    result += "</item>"
    return result

with open("test.csv") as csvfile:
    for line in csvfile:
       print string_to_xml(line)
a=open('test.csv','wb')
a、 写下(“BIRITE,130405,牛排酱,卡夫,24,5盎司,43.96,1.83\n”+
“BIRITE,441045,凤尾鱼柳,玛丽亚,12,13盎司,51.83,4.32\n”)
a、 关闭()
定义字符串到xml(字符串):
entries=string.split(“,”)
result=“\n”
结果+=“\t”+条目[0]+“\n”
结果+=“\t”+条目[1]+“\n”
结果+=“\t”+条目[2]+“\n”
结果+=“\t”+条目[3]+“\n”
结果+=“\t”+条目[4]+“\n”
结果+=“\t”+条目[5]+“\n”
结果+=“\t”+条目[6]+“\n”
结果+=“\t”+条目[7]+“\n”
结果+=“”
返回结果
打开(“test.csv”)作为csvfile:
对于csvfile中的行:
将字符串\u打印到\u xml(行)
打印输出为:

<item>
<distributor>BIRITE</distributor>
<number>130405</number>
<description>Steak Sauce</description>
<brand>Kraft</brand>
<casesize>24</casesize>
<unitsize>5oz</unitsize>
<caseprice>43.96</caseprice>
<unitprice>1.83</unitprice>
</item>
<item>
<distributor>BIRITE</distributor>
<number>441045</number>
<description>Anchovy Filet</description>
<brand>Maria</brand>
<casesize>12</casesize>
<unitsize>13oz</unitsize>
<caseprice>51.83</caseprice>
<unitprice>4.32</unitprice>
</item>

白云石
130405
牛排酱
牛皮纸
24
5盎司
43.96
1.83
白云石
441045
鳀鱼片
玛丽亚
12
13盎司
51.83
4.32

NB:在Linux机器上完成

由于此代码似乎是为其他人运行的,因此让我们创建一个CSV,然后在其上再次运行相同的代码,这将澄清是否存在编码问题

a=open('test.csv','wb')
a.write("BIRITE,130405,Steak Sauce,Kraft,24,5oz,43.96,1.83\n"+
    "BIRITE,441045,Anchovy Filet,Maria,12,13oz,51.83,4.32\n")
a.close()

def string_to_xml(string):
    entries = string.split(',')
    result = "<item>\n"
    result += "\t<distributor>" + entries[0] + "</distributor>\n"
    result += "\t<number>" + entries[1] + "</number>\n"
    result += "\t<description>" + entries[2] + "</description>\n"
    result += "\t<brand>" + entries[3] + "</brand>\n"
    result += "\t<casesize>" + entries[4] + "</casesize>\n"
    result += "\t<unitsize>" + entries[5] + "</unitsize>\n"
    result += "\t<caseprice>" + entries[6] + "</caseprice>\n"
    result += "\t<unitprice>" + entries[7] + "</unitprice>\n"
    result += "</item>"
    return result

with open("test.csv") as csvfile:
    for line in csvfile:
       print string_to_xml(line)
a=open('test.csv','wb')
a、 写下(“BIRITE,130405,牛排酱,卡夫,24,5盎司,43.96,1.83\n”+
“BIRITE,441045,凤尾鱼柳,玛丽亚,12,13盎司,51.83,4.32\n”)
a、 关闭()
定义字符串到xml(字符串):
entries=string.split(“,”)
result=“\n”
结果+=“\t”+条目[0]+“\n”
结果+=“\t”+条目[1]+“\n”
结果+=“\t”+条目[2]+“\n”
结果+=“\t”+条目[3]+“\n”
结果+=“\t”+条目[4]+“\n”
结果+=“\t”+条目[5]+“\n”
结果+=“\t”+条目[6]+“\n”
结果+=“\t”+条目[7]+“\n”
结果+=“”
返回结果
打开(“test.csv”)作为csvfile:
对于csvfile中的行:
将字符串\u打印到\u xml(行)
打印输出为:

<item>
<distributor>BIRITE</distributor>
<number>130405</number>
<description>Steak Sauce</description>
<brand>Kraft</brand>
<casesize>24</casesize>
<unitsize>5oz</unitsize>
<caseprice>43.96</caseprice>
<unitprice>1.83</unitprice>
</item>
<item>
<distributor>BIRITE</distributor>
<number>441045</number>
<description>Anchovy Filet</description>
<brand>Maria</brand>
<casesize>12</casesize>
<unitsize>13oz</unitsize>
<caseprice>51.83</caseprice>
<unitprice>4.32</unitprice>
</item>

白云石
130405
牛排酱
牛皮纸
24
5盎司
43.96
1.83
白云石
441045
鳀鱼片
玛丽亚
12
13盎司
51.83
4.32
使用
open('input.csv',U')
打开文件

“U”告诉python使用通用换行符特性。这允许python自动检测正在使用哪种换行符。问题是不同的平台对新行的处理方式不同

你可能想弄清楚为什么会有奇怪的新词。您可以在此处轻松解决此问题,但它可能会在以后再次出现并成为一个难题。

使用
open('input.csv',“U”)
打开文件

“U”告诉python使用通用换行符特性。这允许python自动检测正在使用哪种换行符。问题是不同的平台对新行的处理方式不同


你可能想弄清楚为什么会有奇怪的新词。您可以在这里轻松地解决这个问题,但它可能会回来并在以后成为一个难题。

我并没有使用它来实际创建有效的代码,只是可以将片段放入一个更大的文件中,这样我就不必手动执行。在这种情况下很难解释,但目前没有必要使用xml解析器。是的,我知道为什么我在这里更改了它,但在我的代码中我使用了“with open as.”并且将方法更改为“return string”使其正常运行。。我不明白为什么。我将编辑我的问题以包含所有内容。好的,在csvfile:中的
行之后,添加
print len(line.split(',')),repr(line[-5:])
。也许(正如我之前暗示的)行结尾不是你想象的那样,因此它将整个内容放在一行中。正如@DSM所暗示的,这可能是一个文件编码问题。你能显示
head-2input.csv | xxd
的输出吗?试着用
open(“input.csv”,“U”)
替换你的open调用,我并不是用它来创建有效的代码,我只是把代码片段放进一个更大的文件中,这样我就不必手工操作了。在这种情况下很难解释,但目前没有必要使用xml解析器。是的,我知道为什么我在这里更改了它,但在我的代码中我使用了“with open as.”并且将方法更改为“return string”使其正常运行。。我不明白为什么。我将编辑我的问题以包含所有内容。好的,在csvfile:
中的
行之后,添加
print len(line.split(',')),repr(line[-5:])
。也许(正如我之前暗示的)行结尾不是你想象的那样,因此它将整个内容放在一行中。正如@DSM所暗示的,这可能是一个文件编码问题。你能显示
head-2input.csv | xxd
的输出吗?试着用
open(“input.csv”,“U”)
替换你的open调用,这对我很有用。所以我的.csv文件一定有问题。它是否像其他用户在评论中建议的那样是一种编码方式?我文件中的所有行都和这两行一样。这对我来说很有用。所以我的.csv文件一定有问题。它是否像其他用户在评论中建议的那样是一种编码方式?我文件中的所有行都和这两行一样。这100%修复了它。非常感谢。我把这个文件在Mac上的Excel和TextEdit之间移动到Linux服务器上,所以它一定是从那里来的。如果没有你,我永远不会明白这一点!这100%解决了它。非常感谢。我把这个文件在Mac上的Excel和TextEdit之间移动到Linux服务器上,所以它一定是从那里来的。如果没有你,我永远不会明白这一点!