Python .read()不会正确读取CSV到字符串

问题描述:

我试图使用MWS Api将制表符分隔的.txt文件推送到Amazon。下面的代码工作:Python .read()不会正确读取CSV到字符串

from boto.mws import connection 
    import time 

    # Amazon US MWS ID 
    MarketPlaceID = 'mpid' 
    MerchantID = 'merchantid' 
    AccessKeyID = 'akid' 
    SecretKey = 'secretkey' 

    conn = connection.MWSConnection(
     aws_access_key_id=AccessKeyID, 
     aws_secret_access_key=SecretKey, 
     Merchant=MerchantID) 

    feed = conn.submit_feed(
     FeedType='_POST_FLAT_FILE_PRICEANDQUANTITYONLY_UPDATE_DATA_', 
     PurgeAndReplace=False, 
     MarketplaceIdList=[MarketPlaceID], 
     content_type='text/tab-separated-values', 
     FeedContent="""SKU QUANTITY 
ABC 123""" 
    ) 

通过上述的方法,ABC的数量被设置为123。然而,当我尝试读取制表符分隔的文件相同的数据到feed_dat和feed_dat进入FeedContent,我得到一个错误,指出我的标题已关闭。

feed_content = open('/Scripts/data.txt', 'rb') 
print feed_content.read() 
feed_dat = feed_content.read() 

我有一种感觉.read()方法正在破坏我的制表符分隔数据。我可以复制/粘贴第一对几行,并通过用三引号将数据包装到API中来推送它们,但我似乎无法将该选项卡文件读取到变量中并以此方式推送它。我也尝试使用.encode('utf-8')编码文件,但没有运气。感谢您的意见!

谢谢

Ç

要调用feed_content.read()两次。第一次读取整个内容,光标现在指向文件的末尾。再次调用feed_content.read()将返回一个空字符串,因为文件的末尾已经到达。

有关此示例,请参阅read()的文档。

一个简单的办法将是转让后,移动print,以避免试图拨打read()两次:

feed_content = open('/Scripts/data.txt', 'rb') 
feed_dat = feed_content.read() 
print feed_dat # print has been moved after the assignment 
+0

真棒谢谢!我发现了另一个解决方案,可能会遇到与您无关的问题。您可以从网络中获取数据:response = urllib2.urlopen('http://www.website.com/output/nvt.txt') feed_dat = response.read() – cm9090 2015-04-01 23:55:19