我有一个 2200 万行 .csv 文件(~850mb),我正在尝试将其加载到 Amazon RDS 上的 postgres 数据库中。每次它都会失败(我收到超时错误),即使我将文件分割成更小的部分(每行 100,000 行),甚至当我使用chunksize.
我现在所做的就是将 .csv 作为数据帧加载,然后使用将其写入数据库df.to_sql(table_name, engine, index=False, if_exists='append', chunksize=1000)
我正在使用 sqlalchemy 中的 create_engine 来创建连接:engine = create_engine('postgresql:database_info')
我测试过写入少量数据没有psycopg2问题,但写入 1000 行大约需要 50 秒。显然对于 22m 行来说这是行不通的。
还有什么我可以尝试的吗?
一个简单的问题:在virtualenv中运行自制程序是个坏主意吗?
如果是这样,有什么方法可以让我每次运行自制程序命令自动停用virtualenv?我不相信自己永远记得停用virtualenv或打开新的终端窗口。
我创建了一个将对象添加到模型的函数.它看起来像这样:
def add_objects(self,obj_name_list):
for obj in obj_name_list:
o = Obj.objects.create(name=obj)
self.objs.add(o)
self.save(update_fields['objs'])
Run Code Online (Sandbox Code Playgroud)
但是当我运行它时,我收到以下错误:
ValueError:此模型中不存在以下字段,或者是m2m字段:objs
错误来自save()通话,但我不明白为什么......在你的回答中请详细解释.谢谢!
这是追溯
.../models.pyc in add_objects(self, obj_name_list)
125 o = Obj.objects.create(name=obj) #create the tag
126 self.objs.add(o) #add the new tag to the foreign key
--> 127 self.save(update_fields=['objs'])
128 except TypeError:
129 raise TypeError("You can only add objects as a string or list")
.../models.pyc in save(self, *args, **kwargs)
95 if not self.pk:
96 is_created = True
---> 97 super(Model, self).save(*args, **kwargs)
98 if is_created:
99 signals.model_created.send(sender=self.__class__) …Run Code Online (Sandbox Code Playgroud) 我刚开始使用jekyll(我是新手ruby)并且我正在尝试创建一个rakefile来自动创建帖子.
我想键入类似的内容:rake post title="x"并创建一个带有该标题和今天日期的帖子.
现在我正在看着这个rakefile,jekyll bootstrap但它看起来像我想要的东西.
我把它切成:
require 'rake'
require 'yaml'
SOURCE = "."
CONFIG = {
'posts' => File.join(SOURCE, "_posts"),
'post_ext' => "md",
}
# Usage: rake post title="A Title"
desc "Begin a new post in #{CONFIG['posts']}"
task :post do
abort("rake aborted: '#{CONFIG['posts']}' directory not found.") unless FileTest.directory?(CONFIG['posts'])
title = ENV["title"] || "new-post"
slug = title.downcase.strip.gsub(' ', '-').gsub(/[^\w-]/, '')
filename = File.join(CONFIG['posts'], "#{Time.now.strftime('%Y-%m-%d')}-#{slug}.#{CONFIG['post_ext']}")
if File.exist?(filename)
abort("rake aborted!") if ask("#{filename} already exists. …Run Code Online (Sandbox Code Playgroud) 我有一个csv文件和一个读取它的函数.
我可以通过多种方式打开它,大多数这些模式产生类似的结果.
def read(mode):
with open("file.csv", mode) as inf:
reader = csv.reader(inf)
for row in reader:
print row
read('r') #prints \r\n characters
read('rb') #prints \r\n characters
read('rU') #prints \n characters but not \r characters
read('rblabla') #WAT.
Run Code Online (Sandbox Code Playgroud)
我想知道为什么允许最后一个例子.它产生与正常读取模式相同的结果.
这有什么原因吗?
来自文档:
im.histogram()=>列表
返回图像的直方图.直方图作为像素计数列表返回,对应于源图像中的每个像素值.如果图像具有多于一个波段,则所有波段的直方图被连接(例如,"RGB"图像的直方图包含768个值).
据我所知,红色有256个值,绿色有256个,蓝色有256个(256*3 = 768).
for i, value in enumerate(im.histogram()):
print i, value
Run Code Online (Sandbox Code Playgroud)
生产:
0 329
1 145
... (skipping some)
256 460
... (skipping some)
767 3953
Run Code Online (Sandbox Code Playgroud)
我的问题是:这是否意味着有:
329个像素是有值R = 0, G = 0, B = 0和
145个像素是有值R = 1, G = 0, B = 0和
460个像素是有值R = 256, G = 1, B = 0和
3953点的像素是有一个价值R = 256, G = 256, B = 256等等?
这是我应该如何阅读输出?
我正在尝试使用 GExiv2 来处理我正在编写的应用程序的元数据,但我遇到了问题。根据GExiv2 主页上的 python 示例,表达式为:
#example
exiv = GExiv2.Metadata('IMAGE FILE')
#my case
exif = GExiv2.Metadata('/home/kimothy/Temp/vuescan/Scan-140102-0001.jpg')
Run Code Online (Sandbox Code Playgroud)
这导致以下错误
[kimothy@localhost Medium Format]$ python3 multi/metadata.py
Traceback (most recent call last):
File "multi/metadata.py", line 50, in <module>
exif = GExiv2.Metadata('/home/kimothy/Temp/vuescan/Scan-140102-0001.jpg')
TypeError: GObject.__init__() takes exactly 0 arguments (1 given)
Run Code Online (Sandbox Code Playgroud)
我对错误消息指出 GExiv2.Metadata() 完全采用零参数这一事实感到困惑。GExiv2 在最新版本中是否发生了变化,还是我做错了什么?
Python版本:3.3.2
我想转换
l = [(1, 'a'), (2, 'b')]
Run Code Online (Sandbox Code Playgroud)
至
r = [1, 2]
p = ['a', 'b']
Run Code Online (Sandbox Code Playgroud)
显然,可以使用循环.是否可以使用lambda?任何其他方式
谢谢大卫
我最近在Openshift上创建了一个单一的齿轮应用程序python 2.7.
我不被允许打开插座 -
返回的终端:
File "server.py", line 21, in <module>
server_socket.bind(("0.0.0.0", PORT))
File "/opt/rh/python27/root/usr/lib64/python2.7/socket.py", line 224, in meth
return getattr(self._sock,name)(*args)
socket.error: [Errno 13] Permission denied
Run Code Online (Sandbox Code Playgroud)
我只需要一个小插座启动并运行 - 有谁知道如何在他们的托管上打开套接字?如果没有,什么是一个很好的替代解决方案,以便我可以托管和打开我自己的python套接字?
我正在尝试打印行并在text/html文件的行中替换单词但由于python(2.7)逐字符地读取它而无法这样做.我究竟做错了什么?
这是代码和输出:
import sys
infile = open('filenmae').read()
for line in infile:
print line
Run Code Online (Sandbox Code Playgroud)
我应该得到的输出(这里只显示第一行):
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
Run Code Online (Sandbox Code Playgroud)
我得到的输出:
<
!
D
O
C
T
Y
P
E
.
.
.
Run Code Online (Sandbox Code Playgroud) 我有这个代码:
x = 'x'
y = []
y.append(x)
z = y
z.append('a')
x = 'X'
print "x:", x
print "y:", y
print "z:", z
Run Code Online (Sandbox Code Playgroud)
输出:
x: X
y: ['x', 'a']
z: ['x', 'a']
Run Code Online (Sandbox Code Playgroud)
我知道这是正确的输出,但我很难理解它产生的原因
y: ['x', 'a']
Run Code Online (Sandbox Code Playgroud)
代替
y: ['x']
Run Code Online (Sandbox Code Playgroud) python ×10
python-2.7 ×3
amazon-rds ×1
csv ×1
django ×1
histogram ×1
homebrew ×1
hosting ×1
jekyll ×1
list ×1
macos ×1
many-to-many ×1
metadata ×1
openshift ×1
pandas ×1
pillow ×1
postgresql ×1
python-3.x ×1
rake ×1
reference ×1
ruby ×1
sockets ×1
tuples ×1
variables ×1
virtualenv ×1